0

PHPを使用したcURLの次のコードがあります。

$product_id_edit="Playful Minds (1062)";
$item_description_edit="TEST";
$rank_edit="0";
$price_type_edit="2";
$price_value_edit="473";
$price_previous_value_edit="473";
$active_edit="1";
$platform_edit="ios";

//set POST variables
$url = 'https://www.domain.com/adm_test/phpgen/offline_items.php?operation=insert';
$useragent = 'Mozilla/5.0 (Windows NT 6.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1';

$fields = array(
   'product_id_edit'=>urlencode($product_id_edit),
   'item_description_edit'=>urlencode($item_description_edit),
   'rank_edit'=>urlencode($rank_edit),
   'price_type_edit'=>urlencode($price_type_edit),
   'price_value_edit'=>urlencode($price_value_edit),
   'price_previous_value_edit'=>urlencode($price_previous_value_edit),
   'active_edit'=>urlencode($active_edit),
   'platform_edit'=>urlencode($platform_edit)
);

$fields_string="";

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//add useragent
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);

curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch,CURLOPT_POST,count($fields));

//execute post
$result = curl_exec($ch);
if(curl_errno($ch)){
print "" . curl_error($ch);
}else{
//print_r($result);
}

$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
//echo "HTTP Response Code: " . curl_error($ch);
echo $httpCode;

//close connection
curl_close($ch);

$httpCode を印刷しました。コード 200 が表示されます。マニュアルページを読んだので、これで問題ないと思いますが、サイトを確認すると、POST された値は存在しません。

同じドメインに投稿していないため、これはクロスドメインと関係がありますか?、127.0.0.1/site/scrpt.php で実行していますが、成功しなかった場合に応答コード 200 を取得するにはどうすればよいですか? ?

また、404 を返したリクエスト URL の一部を削除して 404 を取得しようとしました (これは、cURL が私の仮定で適切に機能していることを意味します)。

URL https://www.domain.com/adm_test/phpgen/offline_items.php?operation=insertに「?operation=insert」を指定すると、何か関係がありますか?

推測してみましょう (暗示ではありませんが)、私は別のサイトから来ており、別の Web サイトのフォームに値を投稿したいと考えています。私の目的は悪意を意味するものではありませんが、これが実行できない場合は、何千行もの情報をエンコードする必要があるということです。

同様に、サーバーからの応答は必要ありません (ただし、応答があれば問題ありません)。

4

3 に答える 3

0
curl_setopt($ch,CURLOPT_POST,TRUE);

CURLOPT_POST- ブール値、値のカウントではなく、post フラグを使用します。

コード 200 は、接続が正しく設定され、サーバーから応答を受信したことを示しますが、要求されたアクションが実装されたことを意味するものではありません。

要求後に印刷$resultして、Web サーバーからの応答を確認します。

于 2012-05-17T10:23:27.890 に答える
0

操作は CURLOPT_POSTFIELDS で渡す必要があります。他のパラメータとともに。

ブラウザの場合、クロスドメインの問題が発生します。そして、あなたのコードはphpサーバー側のコードのように見えるので、これは問題になりません。

于 2012-05-17T10:13:05.617 に答える
0

これが解決策なのか、問題が異なるのかはわかりませんが、次の行:

rtrim($fields_string,'&');

これでなければなりません:

$fields_string = rtrim($fields_string,'&');
于 2012-05-17T10:15:11.027 に答える