2016-03-02 109 views
0

我在PHP中使用cURL將視頻上傳到Wistia。一切工作正常在我的本地服務器。但在開發服務器中,視頻並未上傳。使用var_dump(curl_getinfo($ ch)),我可以看到content_type與本地到開發者服務器不同。我對此感到困惑,任何人都可以幫助我解決這個問題。從開發服務器運行時PHP中的CURL不連接

這裏是我的代碼:在我的本地服務器接收

public function video_upload($filePath) 
{   
    $data = array(
     'api_password' => '0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX5', 
     'file'   => '@'.$filePath, 
    ); 

    $url = 'https://upload.wistia.com';  
    $ch = curl_init(); 
    curl_setopt_array($ch, array(
     CURLOPT_URL   => $url, 
     CURLOPT_POST   => true, 
     CURLOPT_POSTFIELDS  => $data, 
     CURLOPT_HEADER   => false, 
     CURLOPT_RETURNTRANSFER => true, 
    )); 
    curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
    $response = curl_exec($ch); 

    var_dump(curl_getinfo($ch)); 
    var_dump(curl_errno($ch)); 
    curl_close($ch); 

    return $response; 
} 

響應:

array(27) { 
    ["url"]=> string(26) "https://upload.wistia.com/" 
    **["content_type"]=> string(30) "application/json;charset=utf-8"** 
    ["http_code"]=> int(200) 
    ["header_size"]=> int(688) 
    ["request_size"]=> int(189) 
    ["filetime"]=> int(-1) 
    ["ssl_verify_result"]=> int(0) 
    ["redirect_count"]=> int(0) 
    ["total_time"]=> float(17.850026) 
    ["namelookup_time"]=> float(0.252903) 
    ["connect_time"]=> float(0.253271) 
    ["pretransfer_time"]=> float(1.903306) 
    ["size_upload"]=> float(279250) 
    ["size_download"]=> float(417) 
    ["speed_download"]=> float(23) 
    ["speed_upload"]=> float(15644) 
    ["download_content_length"]=> float(417) 
    ["upload_content_length"]=> float(279250) 
    ["starttransfer_time"]=> float(2.173591) 
    ["redirect_time"]=> float(0) 
    ["redirect_url"]=> string(0) "" 
    ["primary_ip"]=> string(13) "162.209.95.19" 
    ["certinfo"]=> array(0) { } 
    ["primary_port"]=> int(443) 
    ["local_ip"]=> string(13) "192.168.1.157" 
    ["local_port"]=> int(54999) 
    ["request_header"]=> string(189) "POST/HTTP/1.1 Host: upload.wistia.com Accept: */* Content-Length: 279250 Expect: 100-continue Content-Type: multipart/form-data; boundary=------------------------370a5719d6336ecc " 
} int(0) 

反應在我的dev的服務器接收:

array(27) { 
    ["url"]=> string(26) "https://upload.wistia.com/" 
    **["content_type"]=> string(23) "text/html;charset=utf-8"** 
    ["http_code"]=> int(500) 
    ["header_size"]=> int(718) 
    ["request_size"]=> int(186) 
    ["filetime"]=> int(-1) 
    ["ssl_verify_result"]=> int(0) 
    ["redirect_count"]=> int(0) 
    ["total_time"]=> float(0.437061) 
    ["namelookup_time"]=> float(0.004766) 
    ["connect_time"]=> float(0.023656) 
    ["pretransfer_time"]=> float(0.194844) 
    ["size_upload"]=> float(319) 
    ["size_download"]=> float(30) 
    ["speed_download"]=> float(68) 
    ["speed_upload"]=> float(729) 
    ["download_content_length"]=> float(30) 
    ["upload_content_length"]=> float(319) 
    ["starttransfer_time"]=> float(0.216544) 
    ["redirect_time"]=> float(0) 
    ["redirect_url"]=> string(0) "" 
    ["primary_ip"]=> string(15) "162.242.168.223" 
    ["certinfo"]=> array(0) { } 
    ["primary_port"]=> int(443) 
    ["local_ip"]=> string(14) "224.178.240.48" 
    ["local_port"]=> int(55164) 
    ["request_header"]=> string(186) "POST/HTTP/1.1 Host: upload.wistia.com Accept: */* Content-Length: 319 Expect: 100-continue Content-Type: multipart/form-data; boundary=----------------------------d45c07c28860 " 
} int(0) 

回答

0

很難說它爲什麼不起作用,但是你從服務器得到的響應包括一個500 http狀態代碼,這表明服務器上有什麼錯誤。

可能您的目的有問題,但沒有來自服務器的更多信息,很難分辨出現問題。通常,來自服務器的500響應指示服務器(wistia)錯誤,而不是客戶端(您)錯誤。

您可能希望將信息發送給wistia以獲取更多詳細信息。

0

我敢打賭,你這樣做完全不同的POST請求, 不喜歡

$verbosefileh=tmpfile(); 
$verbosefile=stream_get_meta_data($verbosefileh)['uri']; 
curl_setopt_array($ch,array(
CURLOPT_CERTINFO=>true, 
CURLOPT_VERBOSE=>true, 
CURLOPT_STDERR=>$verbosefileh 
)); 
curl_exec($ch); 
$postrequest=file_get_contents($verbosefile); 

然後仔細研究發佈請求,什麼是由2臺服務​​器發送請求之間的區別?我打賭有東西..除非你被禁止IP禁止

編輯:一個常見的問題,在一些安裝捲曲有一個默認的useragent,並在一些安裝,捲曲不。 (就像在debian 6中,其類似於「curl/7.21.3(x86_64-unknown-linux-gnu)libcurl/7.21.3 OpenSSL/1.0.0c zlib/1.2.5」,而在debian 8中,沒有默認的字符串..或者是否是另一種方式?),並且許多網站將阻止不包含useragent的請求。爲了確保你有一個useragent,你可以使用curl_setopt($ ch,CURLOPT_USERAGENT,'curl php');

0

您在第二個響應中從服務器收到500錯誤。這就是爲什麼它不是json。

相關問題