phpカールはポストリクエストを送信します

WBOY
リリース: 2016-06-23 13:16:00
オリジナル
1111 人が閲覧しました


多くのタスクでは、投稿リクエストを送信する必要があるかもしれませんが、インターフェイスフォームを使用する必要がないか、使用したくない場合は、php でcurlを使用してフォームの送信をシミュレートできます


まずcurlメソッドをカプセル化します

private function curlExec($options) {		$ch = curl_init ();				curl_setopt_array ( $ch, $options );		// 返回json string		$result = curl_exec ( $ch );		// 检查是否有错误发生		if (curl_errno ( $ch )) {			$error = "curl exec error! " . curl_error ( $ch );			$result = array ( "code" => "1005", "info" => $error );		}		curl_close ( $ch );		return $result;	}
ログイン後にコピー

次に、パラメータ設定の問題があります。公式ドキュメントは最初少しわかりにくかったので、詳しく説明しましょう:

curl_setopt()については、CURLOPT_POSTに配列を渡します。データを multipart/form -data エンコードに変換しますが、URL エンコードされた文字列を渡すと、データは application/x-www-form-urlencoded でエンコードされます。


まず、$post は配列として渡され、CURLOPT_POST は設定では使用されません

CURLOPT_POST=1
ログイン後にコピー

このパラメータは、multipart/form-data 型を application/x-www-form-urlencoded 形式に変換するためのものです。

以下に示すように post リクエストを渡す例は multipart/form-data 形式です:

$post = array ('imagefile' => '@' . $uploadFilePath, 'configfile' => $data );	$url = $this->cfg['baseUrl'].'/upload';		$options = array (    CURLOPT_URL => $url,    CURLOPT_POSTFIELDS => $post,    CURLOPT_HEADER => 0,    CURLOPT_RETURNTRANSFER => 1,    CURLOPT_TIMEOUT => 28,    CURLOPT_CONNECTTIMEOUT => $this::MAX_CONNECTION_TIME);
ログイン後にコピー


以下は URL エンコードされたメソッドであり、実際には文字列を連結してパラメータを渡すことを意味します。

投稿リクエストが application/x-www-form-urlencoded として渡される場合、最初にパラメーターを文字列と連結する必要があり、配列は使用できません。

心配しない場合は、CURLOPT_POST=1 を設定できます。これは CURLOPT_POSTFIELDS= $post で設定する必要があります。

CONTENT_TYPE が常に application/x-www-form-urlencoded であることを確認してください。

例は次のとおりです:

$post = 'ids=123&name=aa';$url = 'http://localhost/Test/test.php';		$options = array (    CURLOPT_URL => $url,				    CURLOPT_HEADER => 0,    CURLOPT_RETURNTRANSFER => 1,					    CURLOPT_POSTFIELDS => $post,    CURLOPT_POST=> 1,    CURLOPT_TIMEOUT => 28,    CURLOPT_CONNECTTIMEOUT => $this::MAX_CONNECTION_TIME,				);
ログイン後にコピー


もう 1 つの解決策は、

$options = array (    ...    CURLOPT_HTTPHEADER= array('Content-Type: application/x-www-form-urlencoded'),);
ログイン後にコピー
などの head ヘッダー情報を自分で記述することです

他の Head が必要な場合は、自分で追加できます。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート