2012-08-18 3 views
0

코드 ignighter로 PHP에서 Google fusion 테이블을 만들려고합니다. - 내가 하드 코딩 토큰 행의 주석을 해제하면, 모든 것이 작동, 이상하게, https://github.com/philsturgeon/codeigniter-curl 나는 다음과 같은 컬 라이브러리를 사용하고연속으로 두 개의 컬 요청을 호출하는 데 실패했습니다. "Length Required"

{ 
    $this->load->library('curl'); 

    $token_url = 'https://www.google.com/accounts/ClientLogin'; 

    //set username and password 
    $email = "[email protected]"; 
    $pass = "yyyyyy"; 

    $request_body = array("accountType" => "HOSTED_OR_GOOGLE", 
          "Email" => $email, 
          "Passwd" => $pass, 
          "service" => "fusiontables", 
          "source" => "fusiontables.GoogleFusion", 
         ); 

    $resp = $this->curl->simple_post($token_url, 
            $request_body, 
            array(CURLOPT_HTTPHEADER => array('Content-Type: application/x-www-form-urlencoded')) 
            ); 
    $response = explode("=", $resp); 

    $token = $response[3]; 

    echo "token = ". $token . "<br>"; 

$url = "http://tables.googlelabs.com/api/query"; 
    //$token = 'DQBBBLcAAABtXliIIvSrim6JpcrxFF23EKVEJHlrDob2TICiFGUISmUd6UXN3Y19MqvYozPuY973kPafpVEReFR8geHHpNGPeO2PGLr8aqQa__v2rZLR4XB0WwoNb0ksa2WWgve2tocgkfwFY4OjQkcbSqUZJbxPBNk5vYGT6kL9hZNNJRZX-XYhUGfYiGlpNyWA0Pe2ql23PsUVRKWotYjgTIKOzO_p6zEAbaEkoxZkpsioXQQqMTM2QFf-hKjYcbOai80IAQI'; 

    print_r($this->curl->info); 

    $post_data = array(
         "sql"=>"CREATE TABLE 'table123' (word: STRING, geom: LOCATION, timestamp: DATETIME)", 
         ); 

    $resp = $this->curl->simple_post( $url, 
             $post_data, 
             array(CURLOPT_HTTPHEADER => array('Content-Type: application/x-www-form-urlencoded', "Authorization: GoogleLogin auth=" . $token)) 
            ); 

    echo "<br>"; 
    print_r($this->curl->info); 
echo "<br>"; 
    print_r($resp); 
} 

: 여기 내 코드입니다. 필요한 경우 정보를 제공했으나 결론은 오류 411 "Length Required"가 표시되고 요청에 대한 메타 데이터가 인쇄되지 않아서 두 번째 요청에서 현재 (즉, Content-Type) 인 것처럼 보입니다. 메타 데이터 누락

Array ([url] => https://www.google.com/accounts/ClientLogin 
    [content_type] => text/plain 
    [http_code] => 200 
    [header_size] => 275 
    [request_size] => 268 
    [filetime] => -1 
    [ssl_verify_result] => 0 
    [redirect_count] => 0 
    [total_time] => 0.206787 
    [namelookup_time] => 4.3E-5 
    [connect_time] => 0.034345 
    [pretransfer_time] => 0.07166 
    [size_upload] => 124 
    [size_download] => 818 
    [speed_download] => 3955 
    [speed_upload] => 599 
    [download_content_length] => 818 
    [upload_content_length] => 0 
    [starttransfer_time] => 0.20675 
    [redirect_time] => 0 
    [certinfo] => Array () 
     ) 

및 두번째, :

Array ([url] => http://tables.googlelabs.com/api/query 
     [content_type] => 
     [http_code] => 411 
     [header_size] => 0 
     [request_size] => 538 
     [filetime] => -1 
     [ssl_verify_result] => 0 
     [redirect_count] => 0 
     [total_time] => 0.107731 
     [namelookup_time] => 0.000849 
     [connect_time] => 0.054077 
     [pretransfer_time] => 0.054085 
     [size_upload] => 97 
     [size_download] => 0 
     [speed_download] => 0 
     [speed_upload] => 900 
     [download_content_length] => -1 
     [upload_content_length] => 0 
     [starttransfer_time] => 0.107711 
     [redirect_time] => 0 
     [certinfo] => Array () 
     ) 
+0

정보를 인쇄 해주십시오. –

+0

저는 여기서 추측하고 있지만 CURLOPT_HTTPHEADER를 수동으로 설정하고 있으므로 Content-Length 헤더를 제공해야한다고 생각합니다. 아마도 컬 라이브러리가 – mask8

+0

정보를 추가 한 것을 덮어 씁니다. @ mask8 그건 당연한거야. Content-Length는 자동으로 채워 져야하고, 첫 번째 컬 요청에서 두 번째가 아닌. –

답변

0

가 알아 낸 다음

는 첫 번째 요청에 대한 정보이다.

은 교체 :

$token = $response[3]; 

말씀

$token = trim($response[3]); 

와 (명확하지 말라고) 현명한에 항상 공백을 마음.

관련 문제