【问题标题】:Passing a cookie using cURL to a website使用 cURL 将 cookie 传递到网站
【发布时间】:2017-11-17 21:55:50
【问题描述】:

我需要使用 PHP 中的 cURL 向某些网站发出请求,其中包含验证码,可以通过设置 cookie“downloadcaptcha=1”来停用该验证码。现在如何通过 cURL 请求将该 cookie 传递给网站?之前,您标记为重复,我已经进行了研究并遇到了使用 cookie jar 文件。我从来没有做过这样的事情,也找不到任何适合新手的文档。

设置cookie的JS等效代码,取自网站禁用验证码的功能:

var exdate=new Date();
var exdays = 1;
var c_name = "downloadcaptcha";
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(1) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value+";path=/";
window.location.reload();

我不想让它在 1 天内过期。 感谢您的帮助。

【问题讨论】:

  • curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: downloadcaptcha=1")); 没有用吗?
  • @Tals 是的,没用
  • 您能否提供一个 PHP 代码示例或您遇到的错误?
  • 我没有收到任何错误,只是网站没有读取 cookie 并请求验证码。我发布的js代码是网站设置cookie的操作
  • 啊,我明白了。您是否尝试在浏览器中设置此 cookie 并检查验证码是否真的消失了?也许有一些 Javascript 代码可以处理这个问题?

标签: javascript php cookies


【解决方案1】:

这是输出。没有提到 cookie

请求标头缺少 Cookie:

Host: www.emuparadise.me
Accept: */*
Accept-Encoding: deflate, gzip
Referer: https://m.emuparadise.me/

将 $request 更改为:

$cookie = '[downloadcaptcha=1'

$request = array();
$request[] = "Host: www.emuparadise.me";
$request[] = "Accept: */*";
$request[] = "Accept-Encoding: deflate, gzip";
$request[] = "Referer: https://m.emuparadise.me/";
$request[] = "Cookie: $cookie";




我已经尝试过了,但网站仍然要求验证码。 看一下我贴的 JS 代码。它取自网站的 禁用验证码的功能

如果我有一个 URL 可以测试,我可以更好地帮助你。

如果有重定向,您必须使用curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

您可能必须使 HTTP 请求标头看起来与 JS HTTP 标头相同。

您需要查看 cURL HTTP 请求和响应,并将其与 JS HTTP 请求和响应进行比较。

查看 JS HTTP 请求和响应:

  • 右击页面
  • 选择 Inspect (Chrome) 或 Insect Element (FireFox)
  • 选择“网络”标签
  • 转到带有 JS 请求的页面,或者如果已经存在,请刷新。

PHP代码疑难解答:

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request);
curl_setopt($ch, CURLOPT_ENCODING,"");

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
curl_setopt($ch, CURLOPT_FAILONERROR,true);
curl_setopt($ch, CURLOPT_ENCODING,"");

curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_HEADER, true);


$data = curl_exec($ch);
if (curl_errno($ch)){
    $data .= 'Retreive Base Page Error: ' . curl_error($ch);
}
else {
  $info = rawurldecode(var_export(curl_getinfo($ch),true));

  $skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE)); 
  $responseHeader= substr($data,0,$skip);
  $response = substr($data,$skip);
   var_export($info);
  echo "----------------------------------\n$responseHeader\n--------------------------\n$response \n------------------------------------\n";

}


原帖

curl_setopt($ch, CURLOPT_COOKIE, $cookie );

单个 Cookie

$cookie = 'CookieName=CookieValue' 

多个 Cookie 以分号分隔。最后一个 cookie 后没有分号。

$cookie = 'CookieName=CookieValue; CookieName=CookieValue' 

curl_setopt($ch, CURLOPT_COOKIE, $cookie );


也可以使用CURLOPT_HTTPHEADER设置Cookie
请参阅以下示例的最后一行。

curl_setopt($ch, CURLOPT_HTTPHEADER, $request);

$request = array();
$request[] = "Host: www.example.com";
$request[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$request[] = "User-Agent: MOT-V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0";
$request[] = "Accept-Language: en-US,en;q=0.5";
$request[] = "Connection: keep-alive";
$request[] = "Cache-Control: no-cache";
$request[] = "Pragma: no-cache";
$request[] = "Cookie: $cookie";

【讨论】:

  • 我已经尝试过了,但网站仍然要求验证码。看一下我贴的 JS 代码。它取自网站的禁用验证码的功能
  • 使用 JS 它不会发出任何 HTTP 请求。它只是通过更改 document.cookie 来设置一个 cookie。我试过只做document.cookie = "downloadcaptcha=1" 并且它有效,但我必须通过我的服务器使用 PHP 和 cURL 来完成
  • 这是输出。没有提到 cookie:pastebin.com/raw/Y6Pk5Y4n
  • 它在window.location.reload();执行时发出请求,我添加了查看该请求的指令。
  • 好的。明天去看看
猜你喜欢
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多