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-data,网站根本没有准备好处理。传入一个 URL 编码的字符串:

$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”的文件名来明确指定。此参数可以作为 urlencoded 字符串(如 'para1=val1¶2=val2&...')或作为字段名称作为键和字段数据作为值的数组传递。如果 value 是一个数组,则 Content-Type 标头将设置为 multipart/form-data。从 PHP 5.2.0 开始,如果文件以 @ 前缀传递给此选项,则 value 必须是数组。

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

于 2012-12-02T07:02:37.190 回答