2017-07-12 21 views
0

PHPを使用してAPIにアクセスしようとしている人を助けようとしています。 ColdFusionを使用している私のコードは、APIへの良いポストを行いますが、PHPを動作させることはできません。 CFのコードは、データを送信するためにurlparamsを使用しています。 enter image description hereURLスコープのcURL投稿データはスコープ形式ではありませんか?

= apiauthがメインの認証機能方法であって、APIからの結果の呼び出しの

<cfhttp url="https://example.com/_api/proxyApi.cfc" method="post" result="httpResult" charset="UTF-8"> 
    <cfhttpparam type="url" name="method" value="apiauth"/> 
    <cfhttpparam type="url" name="argumentCollection" value="#jsData#"/> 
</cfhttp> 

ダンプは、このようなURLの変数を示してい、引数のコレクションのjson文字列がapiauthによってAPIの修正関数に渡されます。

PHPから、彼のカールはURLではなくフォームデータとして投稿されており、APIは間違った範囲にあるため、必要な情報が欠落していると不平を言う。 APIから同じダンプが同じデータを示し

$curl = curl_init(); 
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_URL => $target_url, 
    CURLOPT_POST => 1, 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_MAXREDIRS  => 2, 
    CURLOPT_AUTOREFERER => true, 
    CURLOPT_POSTFIELDS => array(
     'method' => 'apiauth', 
     'argumentCollection' => $json 
    ) 
)); 

、間違った範囲内:私の代わりにカール用URLスコープを作成する方法を理解しようとしてきた

enter image description here

私たちが適切な範囲でデータを取得できるようになったようですが、私のPHPの知識は危険にさらされています。

答えて

1

CFの例で空のPOSTを送信しています。したがって、URLスコープ(キーと値の対を形成し、クエリ文字列)のあなたのダンプデータを示し

https://example.com/_api/proxyApi.cfc?method=apiauth&argumentCollection=...

:のように

<cfhttpparam type="url"は、クエリ文字列パラメータとして処理されます。

あなたのPOST本体内にそれらのパラメータを配置するには、あなたが使用します。

<cfhttpparam type="formfield"

そして、あなたはスコープがデータを示すだろう形成しています。


あなたのPHPのcURLは後者のことを行います。それは、POST本体にパラメータを追加します。

あなたはcURLの代わりにこれを行う、あなたの例のCFコードとして仕事をしたい場合:

// add the parameters to the URL's query string 
// start with & instead of ?, if the URL already contains a query string, see comment below snippet 
$target_url .= '?'.'method=apiauth'.'&'.'argumentCollection='.urlencode($json); 

$curl = curl_init(); 
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_URL => $target_url, 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_MAXREDIRS  => 2, 
    CURLOPT_AUTOREFERER => true 
)); 

$target_urlでいないクエリ文字列:$target_url

$target_url = 'https://example.com/_api/proxyApi.cfc'; 
$target_url .= '?'.'method=apiauth'.'&'.'argumentCollection='.urlencode($json); 

クエリ文字列:

$target_url = 'https://example.com/_api/proxyApi.cfc?p='; 
$target_url .= '&'.'method=apiauth'.'&'.'argumentCollection='.urlencode($json); 

サイドノート:クエリ文字列には約2,000文字の制限があるため、JSONをクエリ文字列で送信したくない場合があります(ブラウザとウェブサーバーによって異なります)。 JSONが複雑な場合、クエリ文字列は切り捨てられ、すべてが混乱します。この代わりにPOST本体を使用してください。

関連する問題