2

次のコードはサイトにログインしません。肯定的な提案:ログインしようとしましたが、ログインしません。

$ch = curl_init();  
curl_setopt($ch, CURLOPT_URL,"http://www.mywholesaleroute.com/");  
curl_setopt($ch, CURLOPT_COOKIEFILE,1);  
curl_setopt($ch, CURLOPT_POST, 1);  
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  
curl_setopt($ch, CURLOPT_HEADER, true);    
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);  
curl_setopt($ch, CURLOPT_TIMEOUT, 120);  

$post_array = array(  
'pre_url'=>'jewelry/',  
'login_email'=>'developer1950@gmail.com',
'login_pswd'=>'help99123',   
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_array); 

$output = curl_exec($ch);

curl_close($ch);
4

1 に答える 1

1

配列をデータに渡すと、ウェブサイトがまったく処理する準備ができていないCURLOPT_POSTFIELDSとしてエンコードされます。multipart/form-dataURL エンコードされた文字列を渡します。

$fields = array();
foreach ( $post_array as $key => $value )
    $fields []= urlencode( $key ) . '=' . urlencode( $value );
$fields = implode( '&', $fields );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $fields );

これにより、データが としてエンコードされapplication/x-www-form-urlencodedます。

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

http://php.net/manual/en/function.curl-setopt.php

于 2012-12-02T07:02:37.190 に答える