2010-01-10 89 views
2

我正尝试使用cURL登录到系统(恰好使用SquirrelMail客户端),我遇到了麻烦。PHP/cURL:无法远程登录

这里是我的相关PHP代码:

$handle = curl_init(); 

curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($handle, CURLOPT_URL, $url); 
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($handle, CURLOPT_POST, true); 
curl_setopt($handle, CURLOPT_POSTFIELDS, "login_username=myusername&secretkey=mypass&js_autodetect_results=0"); 

$output = curl_exec($handle); 
curl_close($handle); 
print $output; 

,当我尝试运行它时,页面回来了一个消息,说我必须先登录才能访问它。挖掘这个登录文件(redirect.php,如果你熟悉SquirrelMail的话),我发现当变量login_username没有被定义时会出现这个错误。

这里是我的卷曲详细输出:

* About to connect() to www.cwazy.net port 80 (#0) 
* Trying 72.18.206.197... * connected 
* Connected to www.cwazy.net (72.18.206.197) port 80 (#0) 
> POST /wi/sm/src/redirect.php HTTP/1.1 
Host: www.cwazy.net 
Accept: */* 
Content-Length: 64 
Content-Type: application/x-www-form-urlencoded 

< HTTP/1.1 302 Found 
< Date: Sun, 10 Jan 2010 06:51:34 GMT 
< Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny3 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g 
< X-Powered-By: PHP/5.2.6-1+lenny3 
< Set-Cookie: SQMSESSID=b39c5dcf6e96309ac98b08b8f4f42374; path=/wi/sm/ 
< Expires: Thu, 19 Nov 1981 08:52:00 GMT 
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
< Pragma: no-cache 
< Set-Cookie: SQMSESSID=b39c5dcf6e96309ac98b08b8f4f42374; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=b39c5dcf6e96309ac98b08b8f4f42374; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=b39c5dcf6e96309ac98b08b8f4f42374; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=b39c5dcf6e96309ac98b08b8f4f42374; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=b39c5dcf6e96309ac98b08b8f4f42374; path=/wi/sm/; HttpOnly 
< Set-Cookie: squirrelmail_language=en_US; expires=Tue, 09-Feb-2010 06:51:34 GMT; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/ 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: key=S9ZRyTL%2B; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618; path=/wi/sm/; HttpOnly 
< Location: webmail.php 
< Content-Length: 0 
< Content-Type: text/html; charset=iso-8859-1 
< 
* Connection #0 to host www.cwazy.net left intact 
* Issue another request to this URL: 'http://www.cwazy.net/wi/sm/src/webmail.php' 
* Violate RFC 2616/10.3.3 and switch from POST to GET 
* Re-using existing connection! (#0) with host www.cwazy.net 
* Connected to www.cwazy.net (72.18.206.197) port 80 (#0) 
> GET /wi/sm/src/webmail.php HTTP/1.1 
Host: www.cwazy.net 
Accept: */* 

< HTTP/1.1 200 OK 
< Date: Sun, 10 Jan 2010 06:51:40 GMT 
< Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny3 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g 
< X-Powered-By: PHP/5.2.6-1+lenny3 
< Set-Cookie: SQMSESSID=a6e32d5f2bd7a2ccca51edd2aa4ea143; path=/wi/sm/ 
< Expires: Thu, 19 Nov 1981 08:52:00 GMT 
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
< Pragma: no-cache 
< Set-Cookie: SQMSESSID=a6e32d5f2bd7a2ccca51edd2aa4ea143; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=a6e32d5f2bd7a2ccca51edd2aa4ea143; path=/wi/sm/; HttpOnly 
< Set-Cookie: SQMSESSID=a6e32d5f2bd7a2ccca51edd2aa4ea143; path=/wi/sm/; HttpOnly 
< Content-Length: 1154 
< Content-Type: text/html; charset=iso-8859-1 
< 
* Connection #0 to host www.cwazy.net left intact 
* Closing connection #0 

任何想法?

回答

4

初始POST返回cookie:

Set-Cookie: SQMSESSID=6d70837e874750f37df81f0aaaa48618 

但这个cookie不是由客户端上的下一个GET请求发送。 SM没有看到任何会话,并试图创建一个新的一个新的ID:

Set-Cookie: SQMSESSID=a6e32d5f2bd7a2ccca51edd2aa4ea143 

解决这个问题,你可以告诉卷曲存储cookie:

curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt'); 

,你可能需要禁用CURLOPT_FOLLOWLOCATION,并在第二次调用curl时请求webmail.php(使用与经过身份验证的会话相同的cookie jar)。

1

尝试添加到您的代码

$cookie="cookie.txt"; 
    if(!file_exists($cookie)) { 
     $fh = fopen($cookie, "w"); 
     fwrite($fh,""); 
     fclose($fh); 
    } 

curl_setopt($curl_connection, CURL_COOKIEJAR, $cookie); 
curl_setopt($curl_connection, CURL_COOKIEFILE, $cookie); 
curl_setopt($curl_connection, CURL_VERBOSE, true); 

希望这有帮助..