2017-09-03 3 views
10

순수 CURL에서 Guzzle로 마이그레이션하려고하지만 API 호출이 올바르게 등록되지 않았습니다. (여기에서 클래스 : https://stackoverflow.com/a/7716768/8461611)Guzzle이 CURL처럼 작동하지 않습니다.

작업 CURL

... 
$Curl = new CURL(); // setting all curl_opts there 

// creating session 
$session = explode(";", $Curl->post("http://www.share-online.biz/upv3_session.php", "username=".$un."&password=".$pw)); 
$session_key = $session[0]; 
$upload_server = $session[1]; 

// upload 
$vars = ... // see below 
var_dump(explode(";",$Curl->post($upload_server, $vars))); // works 

이제 목구멍 물건

... 
$Curl = new GuzzleHttp\Client(); 
$jar = new GuzzleHttp\Cookie\FileCookieJar("cookie.txt", true); 

//creating session 

$session = explode(";", $Curl->request('POST', "http://www.share-online.biz/upv3_session.php", 
    ["form_params" => ["username" => $un, "password" => $pw], 'cookies' => $jar])->getBody()); 
$session_key = $session[0]; 
$upload_server = $session[1]; 

$vars = ["username" => $un, 
      "password" => $pw, 
      "upload_session" => $session_key, 
      "chunk_no" => 1, 
      "chunk_number" => 1, 
      "filesize" => filesize($file), 
      "fn" => new CurlFile(realpath($file)), 
      "finalize" => 1, 
      "name" => "test", 
      "contents" => $file, 
    ]; 

var_dump(
    explode(";",$Curl->request(
      'POST', "http://".$upload_server, ["multipart" => [$vars], 'cookies' => $jar]) 
       ->getBody())); 
// outputs *** EXCEPTION session creation/reuse failed - 09-3-2017, 3:05 am *** 

내가 쿠키 뭔가를 잘못하고 있어요 가정합니다. 그들은 var_dump($jar); 쇼로 설정됩니다. API 문서 : http://www.share-online.biz/uploadapi

+0

'CURL' 클래스 란 무엇입니까? 그게 어디서 온거야? – Phil

+0

@Phil https://stackoverflow.com/a/7716768/8461611 해당 게시물 – rndus2r

답변

-1

먼저 문자열을 얻으려면 ...->getBody()->getContents()으로 전화해야합니다. 또는 본문 개체를 문자열로 캐스팅합니다 ((string) ...->getBody()).

그러면 CurlFile 클래스를 사용할 수 없습니다. 파일 핸들을 얻고 in the docs과 같이 Guzzle에 직접 전달하려면 fopen()을 사용하십시오. 파일 업로드의 경우 form_params 대신 multipart을 사용해야한다는 점에 유의하십시오.

+0

에서 편집을 참조하십시오. getBody()는 암시 적으로 완료된 문자열로 캐스트 될 수 있습니다 (http://guzzle3.readthedocs.io/http-client/). response.html # response-body); $ file은이 경우 문자열이며 docs에 따라 허용되어야합니다. 그러나 fopen()으로 둘러 쌀 때 아무 것도 변하지 않았습니다. 위의 슬프게도 같은 오류. multipart가 설정됩니다. – rndus2r

+0

@ rndus2r, Guzzle 6을 사용하고 있지만 Guzzle 3 용 문서는주의하십시오. –

+0

"CurlFile"에 대해 이야기 할 때, 나는이 매개 변수를 의미했다 : ""fn "=> 새로운 CurlFile (realpath ($ file)),'. –

관련 문제