2010-08-20 58 views
2

我正在为没有它的网站编写“API”。与CURL一起使用Cookie

基本上,我的PHP代码登录到网站,并抓取我需要的数据(两个不同的传输)。

在登录时,我遇到了一些问题。该网站通过HTTP设置了几个cookie,我使用CURL的cookie机制捕获cookie。 这似乎很好地工作,除了他们也试图通过JavaScript设置一个cookie在相同的响应。

我不需要解析javascript,因为它们设置的cookie是完全可预测的。 我需要的是以某种方式告诉CURL这个cookie存在,而它仍然保持其他cookie。

帮助? :)


通过卷曲POST提交登录信息后,我得到这些标题:

HTTP/1.1 200 OKDate: Fri, 20 Aug 2010 09:39:14 GMT 
Server: Apache-Coyote/1.1 
Content-Type: text/html;charset=ISO-8859-1 
Content-Length: 492 
Set-Cookie: JSESSIONID=5DE1F32B3668DABB408BBEA10C28DBD5.testmmf1; Path=/merchantlogin 
Set-Cookie: loginType=M 
Connection: close 

这是页面内容:

<script type="text/javascript"> 
    var nextyear = new Date(); 
    nextyear.setFullYear(nextyear.getFullYear() + 1); 
    document.cookie = 'login=' + document.referrer + '; expires=' + nextyear.toGMTString(); 
</script> 

通知的套装 - Cookiedocument.cookie部分。

+0

很奇怪的情况,你能显示一些源代码吗? – Otar 2010-08-20 09:12:44

+0

当然!给我一个秒... – Christian 2010-08-20 09:15:53

回答

1

生成通过代码cookie文件,并做出请求位置巫之前要求的cookie的选项CURLOPT_COOKIEFILE

+0

我想我正在修复这个就像那样... – Christian 2010-08-20 13:46:47

+0

你可以混淆东西,接收第一个cookie,将它与生成的一个合并,并与下一个请求发送合并的cookie – canni 2010-08-20 14:04:38

0

添加它只需通过SETOPT您可以设置使用curl_setopt饼干和CURLOPT_COOKIE选项第一。当然,这样做会抹去你的其他饼干,但它们会被取消,对吗?

如果您可以获得当前值CURLOPT_COOKIE的保留,则可以用分号附加您的cookie。但是PHP似乎没有curl_getopt函数。

+0

正如我上面所说,问题是将现有的cookie同时发送到目标服务器。 – Christian 2010-08-20 13:46:07