2016-12-06 37 views
3

HTTPSを使用してZIPファイルをアップロードする必要があります。これはLinuxのcURLコマンドでのみ有効です。 I私はPHPのcURLリクエストで行方不明ですか理解していない...Linux cURL対PHP cURL - POSTリクエスト

LinuxのcURLの[作業]:

curl -v -x http://api.test.sandbox.mobile.de:8080 -u USER:PASS -X POST --data-binary @502.zip https://services.mobile.de/upload-api/upload/502.zip 

応答:

POST /upload-api/upload/502.zip HTTP/1.1 
User-Agent: curl/7.38.0 
Host: services.mobile.de 
Accept: */* 
Content-Length: 6026 
Content-Type: application/x-www-form-urlencoded 
Expect: 100-continue 
HTTP/1.1 100 Continue } [data not shown] 
HTTP/1.1 201 Created 
Date: Tue, 06 Dec 2016 12:40:41 GMT 
Content-Type: text/html;charset=utf-8 
Vary: Accept-Encoding 
Transfer-Encoding: chunked 

PHPのcURL [動作していません]:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Basic '. base64_encode("USER:PASS"), 
    'Content-Type: text/plain' 
)); 
curl_setopt($ch,CURLOPT_PROXY, 'api.test.sandbox.mobile.de:8080'); 
curl_setopt($ch,CURLOPT_URL, 'https://services.mobile.de/upload-api/upload/502.zip'); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch,CURLOPT_POST, 1); 
curl_setopt($ch,CURLOPT_POSTFIELDS, [ 'file' => new CURLFile('502.zip') ]); 
curl_setopt($ch,CURLOPT_VERBOSE, 1); 
$result = curl_exec($ch); 
curl_close($ch); 

応答:サイトマニュアルの

POST /upload-api/upload/502.zip HTTP/1.1 
Host: services.mobile.de 
Accept: */* 
Content-Length: 6225 
Expect: 100-continue 
Content-Type: text/plain; boundary=------------------------835f6ea7                                             5f783449 
HTTP/1.1 100 Continue 
HTTP/1.1 201 Created 
Date: Tue, 06 Dec 2016 13:36:21 GMT 
Content-Type: text/html;charset=utf-8 
Vary: Accept-Encoding 
Transfer-Encoding: chunked 

それが書かれています: 「アップロードファイルは、HTTP-ペイロードとして送信する必要がありますし、バイナリ形式で、マルチパートとエンコードがサポートされていません。」 私はまた、Content-Lengthが同じではないことに気付きました。なぜですか?

ありがとうございました!

答えて

0

はラインを取り除く:

'Content-Type: text/plain' 

あなたがメッセージ全体のコンテンツタイプを設定しているし、それが正しくPOSTデータをフォーマットされていません。

+0

私は 'Content-Type:text/plain'なしで試しましたが、私は同じ結果を得ます。 [Content-Length:6225] – Mirela

+0

'CURLOPT_POST'を1(真)に設定すると、アップロードに適切なコンテンツタイプを設定する必要があります。 'Content-Type:application/x-www-form-urlencoded'に変更されましたか? –

+0

いいえ、それはです:Content-Type:multipart/form-data;境界= ------------------------ 679815a4dab25422; HTTP/1.1 100続行します。 HTTP/1.1 201作成済み。 Content-Type:text/html; charset = utf-8 – Mirela