我正在尝试通过帖子请求将用户名和密码发送到我的localhost上的登录页面。 我使用下面的代码生成请求并将其发送到页面
$url='http://localhost/index.php';
$fields = array('username' => 'admin', 'password' => '1234');
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($fields));
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
修改
的print_r(curl_getinfo($ CH));打印此信息
数组([url] => http://www.url.com/index.php [content_type] => text / html [http_code] => 200 [header_size] => 380 [request_size] => 182 [filetime] => - 1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 2.234 [namelookup_time] => 0.063 [connect_time] => 0.063 [pretransfer_time] => 0.063 [size_upload] => 28 [size_download] => 2322 [speed_download] => 1039 [speed_upload] => 12 [download_content_length] => 2322 [upload_content_length] => 28 [starttransfer_time] => 2.234 [redirect_time] => 0 [ certinfo] => Array()[primary_ip] => :: 1 [primary_port] => 80 [local_ip] => :: 1 [local_port] => 54953 [redirect_url] =>)数组([主持人] => localhost [接受] => / [Content-Length] => 28 [Content-Type] => application / x-www-form-urlencoded)
生成请求,我收到HTTP 200,OK状态作为响应。请求不会随之发送任何参数,作为响应,我会收到正常的登录表单而不是登录屏幕后。
任何人都可以告诉我上面的代码有什么问题。
我尝试使用stream_context_create和file_get_contents,但在两种情况下都会生成相同的响应(登录表单而非登录后屏幕),就像他们正在接收任何参数一样。
答案 0 :(得分:0)
1)CURLOPT_POST
选项期望boolean
类型的值。但是,如果count($fields)
非空,则true
将$fields
投放到POST
,这在您的代码中无关紧要。
2)不要手动构建array
数据,而是使用http_build_query()
。您也可以将CURLOPT_POSTFIELDS
数据传递给string
选项,并自动将其转换为Content-Type
。
3)您不需要设置{{1}}标头,因为cURL会自动为POST请求设置它。