0

ローカルファイルをhttpsURLにアップロードするためのRESTAPIをテストしようとしています。私は現在、curlを使用しています。問題は、curlのPOSTがPUT(http://curl.haxx.se/docs/manpage.html)に変換されていることです。コマンドラインからテストするには、次を使用しています。

curl -H "Content-Type:application / json" -H "Authorization:Bearer XXXXXXXXXXXXXXXYYYYYzzzzzz" -H "Accept-Version:〜1" -H "Except:100-continue" -H "Accept-Version:〜1"- T "somefile.pdf" "https://abc-xyz.co/docs"

出力:

{"code":"BadMethod","message":"/docs does not support PUT"}

私のphpコード:

$url = '"https://abc-xyz.co/docs';
$filepath = '/Users/me/Documents/somefile.pdf'; //mac path
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST" ); 
curl_setopt($ch, CURLOPT_HTTPHEADER,  
array('Authorization: Bearer XXXXXXXXXXXXXXXYYYYYzzzzzz', 'Accept-Version: ~1', 'Except: 100-continue'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$file = "@".$filepath;
curl_setopt($ch, CURLOPT_POSTFIELDS,$file); 
$response = curl_exec($ch);
if(!CURL_ERROR($ch))
  {      
  echo"\n The output is:".$response;
  }
else
  {
  echo "\nUpload failed ".curl_error($ch);
  exit;
  } 
curl_close($ch);

出力:解析エラーが発生します。

誰かが私に3つのことを教えてもらえますか?

  1. curlを使用してhttpsのPOSTを実行できますか?はいの場合、どのように?いいえの場合、私のアプローチはどうあるべきですか?
  2. PHPでファイルパス名を渡す方法は?「@」。$filepathも試しましたが、それでも気に入らないです。
  3. ファイルのアップロードタイプをpdfのみに制限したい場合、mimeタイプを使用する必要がありますか?(アプリケーション/ pdf ????)

ありがとう、DR

4

1 に答える 1

0

コマンドラインから、 curlを使用したpostfileuploadを参照してください。

PHPから、マニュアルを参照してください

HTTP「POST」操作で投稿する完全なデータ。ファイルを投稿するには、ファイル名の前に@を付け、フルパスを使用します。ファイル名の後に「;type= mimetype」の形式のタイプを付けることにより、ファイルタイプを明示的に指定できます。このパラメーターは、「para1 = val1&para2 = val2&...」のようなurlencoded文字列として、またはフィールド名をキーとして、フィールドデータを値として持つ配列として渡すことができます。値が配列の場合、Content-Typeヘッダーはmultipart/form-dataに設定されます。PHP 5.2.0以降、ファイルが@プレフィックスを付けてこのオプションに渡される場合、値は配列である必要があります。

curl_setopt($ch, CURLOPT_POSTFIELDS,array('someuploadname'=> "@".$filepath));
于 2012-06-14T23:20:08.077 に答える