1

简介:我正在尝试通过使用 web 服务来实现一些文件。这个网络服务让我可以自由地调用基本方法,但是当涉及到严重的方法时,它需要一个 cookie,我的会话将使用那个 cookie 建立。

我的问题:我尝试了两种方法,首先我通过 setcookie() 函数创建了普通 cookie,然后创建了一个类似 cookie 的文件。第二个起作用了,现在我的连接自己创建了一个 cookie 文件。现在我必须为复杂/严重的功能发送相同的 cookie 文件。

但它不起作用。

如果我的问题不清楚,请具体询问,请帮助我。

那是成功创建cookie文件。

$soap_do = curl_init($url);
curl_setopt($soap_do, CURLOPT_COOKIEJAR, "/mypath/testFile3.txt");
curl_setopt($soap_do, CURLOPT_HTTPHEADER,     $header);
curl_setopt($soap_do, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($soap_do, CURLOPT_MAXREDIRS, 8);
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($soap_do, CURLOPT_POSTFIELDS,     $soap_request);
$result = curl_exec($soap_do);

下面你会看到我试图通过 curl 发送 cookie 文件的代码,这部分不起作用。

$soap_do2 = curl_init($url);
curl_setopt($soap_do2, CURLOPT_COOKIEJAR, "/mypath/testFile3.txt");
curl_setopt($soap_do2, CURLOPT_HTTPHEADER, $header2);
curl_setopt($soap_do2, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($soap_do2, CURLOPT_MAXREDIRS, 8);
curl_setopt($soap_do2, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($soap_do2, CURLOPT_POSTFIELDS,     $soap_request2);
$result2 = curl_exec($soap_do2);

如您所见,它是相同的代码o_O,因为我不知道该怎么做,请再次提供帮助。

4

2 回答 2

0

Also see: http://php.net/manual/en/function.curl-setopt.php use CURLOPT_COOKIEJAR to store your cookie and CURLOPT_COOKIEFILE (or CURLOPT_COOKIE) to send the cookie.

So soap_do2 needs curl_setopt($soap_do2, CURLOPT_COOKIEFILE, "/mypath/testFile3.txt");

Maybe your $soap_request2 is empty or incorrect.

When i do a GetContactInfo() call to this service without any parameter i got the same error. When is send an empty or nonsense parameter like new SoapParam(new stdClass(), "test") i got the right response.

于 2013-04-22T18:30:35.773 回答
0

我发现了我的问题。

正如@Bass Jobsen 所说,我们可以使用 CURLOPT_COOKIEJAR 存储 cookie,并使用 CURLOPT_COOKIEFILE 发送 cookie。那是一个问题。正如他所说,我改变了我的代码,它现在可以工作了。

我的第二个错误:我每次都在代码开头创建cookie文件。现在我删除了那部分。

工作代码:

$soap_do = curl_init($url);
curl_setopt($soap_do, CURLOPT_COOKIEJAR, "/home/mypath/testFile3.txt");
curl_setopt($soap_do, CURLOPT_HTTPHEADER,     $header);
curl_setopt($soap_do, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($soap_do, CURLOPT_MAXREDIRS, 8);
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($soap_do, CURLOPT_POSTFIELDS,     $soap_request);
$result = curl_exec($soap_do);

上面,我告诉 web 服务哪个文件(具有确切路径)存储 cookie 值。

$soap_do2 = curl_init($url);
curl_setopt($soap_do2, CURLOPT_HTTPHEADER, $header2);
curl_setopt($soap_do2, CURLOPT_COOKIEFILE, "/home/mypath/testFile3.txt");
curl_setopt($soap_do2, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($soap_do2, CURLOPT_MAXREDIRS, 8);
curl_setopt($soap_do2, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($soap_do2, CURLOPT_POSTFIELDS,     $soap_request2);
$result2 = curl_exec($soap_do2);

上面,我用 CURLOPT_COOKIEFILE 发送 cookie 文件

希望对其他人有所帮助。

于 2013-04-24T07:37:37.290 回答