2016-07-13 16 views
0

xmlデータをAPIに投稿し、curlを使う必要があります。これはコマンドラインのカールであり、少なくともPHPやlibcurlではカールしません。投稿する一般的なファイルからAPIに符号化されたデータを投稿するためにカールを使用する

XMLは次のようなものになります。

<SearchRequest> 
<LoginDetails> 
<Login>******</Login> 
<Password>******</Password> 
<Locale></Locale> 
<AgentReference></AgentReference> 
</LoginDetails> 
<SearchDetails> 
<ArrivalDate>2016-08-01</ArrivalDate> 
<Duration>2</Duration> 
<RegionID>279</RegionID> 
<MealBasisID>0</MealBasisID> 
<MinStarRating>0</MinStarRating> 
<ContractSpecialOfferID>0</ContractSpecialOfferID> 
<RoomRequests> 
<RoomRequest> 
<Adults>2</Adults> 
<Children>0</Children> 
<Infants>0</Infants> 
</RoomRequest> 
</RoomRequests> 
</SearchDetails> 
</SearchRequest> 

をしかし、それは符号化された形式で掲載されます。

仕様によると、完全な要求は、この例のようになります。

HTTPポスト例

POST /xml/book.aspx HTTP/1.1 
Content-Type application/x-www-form-urlencoded 
Host servername-xml-test.somedomain.co.uk 
Content-Length 331 
Expect 100-continue 
Proxy-Connection Keep-Alive 

Data=%3CSearchRequest%3E%0D%0A%20%20%3CLoginDetails%3E%0D%0A%20%20%20%20%3CLog 
in%3E%3C%2FLogin...cutting out all that encoded xml here... %3C%2FSearchRequest%3E 

だから、基本的に、私はに投稿するURLやポストへの実際のXMLでてきたもの(コード化されておらず、改行なしで)

私は(サーバーが私の到達範囲外であるとサポートは、私がいつも言うことができないので、正確に何のエラーが非常に遅いです)のみエラーがサーバー側に発生して次のことを試してみた:

curl --header "Content-Type:application/x-www-form-urlencoded" \ 
    --header "Proxy-Connection:Keep-Alive" \ 
    -X POST \ 
    --data-binary "[email protected]" \  
    https://server-and-domain/xml/book.aspx 

これは、システムを返します。 。例外。私が " - データ - バイナリ"を " - データ"にすることができるのと同じことです。

私も試してみた:

curl --header "Content-Type:application/x-www-form-urlencoded" \ 
    --header "Proxy-Connection:Keep-Alive" \ 
    -X POST \ 
    --form "[email protected]" \  
    https://server-and-domain/xml/book.aspx 

これは、はるかに複雑なエラー(あなたは.NETの詳細なエラーをオフにしていない場合、あなたが得るもの)のように見える何かを返します。だから、私はこの要求は、サーバーが期待しているものからかなり離れていると思います。

同じことが--form "[email protected]"になります(ただし、私がする必要がない場合は、手動でファイルを手動でエンコードする必要はありません)。

私の回避策 私は、回避策を持っている:「myfile.txtの」に私は「データ=」先行を追加し、私はちょうどURLにASCIIまたはバイナリデータのようにそれを投稿してください。

curl --header "Content-Type:application/x-www-form-urlencoded" \ 
    --header "Proxy-Connection:Keep-Alive" \ 
    -X POST \ 
    --data-binary "@myfile.txt" \   
    https://server-and-domain/xml/book.aspx 

は、しかし、私はこれを行うには有するが、先行するパラメータ名から自由「myfile.txtの」を維持し、私はこれが私のために処理することができる必要がありカール何かであることを推測している好まないでしょうか?

答えて

0

curl -X POST -F "[email protected]${file}" https://server-and-domain/xml/book.aspx 

これが正常にあなたの例のような試みが失敗したnginxのサーバーへのポスト...これをしようと考えてみましょう。

+0

これを行うと、私は「悪い部分」になります。私が実際にやっているのは、 '--F" Data = @ $ {filename} "'パラメータの名前を "Data" – Jensd

関連する問題