【发布时间】:2012-07-21 18:27:12
【问题描述】:
我正在尝试使用 PHP 的函数 file_get_contents() 为服务器 Strava.cz 创建一个 非官方 API;但它不起作用。怎么了?
function strava_czLogin($machine,$user,$pass){
//Sends the request
$src = file_get_contents(
'http://m.strava.cz/Stravnik/formprihlaseni.aspx',
false,
stream_context_create(
array('http'=>array('header' => "User-Agent:(none; StravaCekujNET; Linux x86_64; rv:1.0)\r\n"))
)
);
$src = mb_convert_encoding($src,'utf-8','auto'); //Encoding correction
//Works with the cookies (yummy!)
$cookies = array();
foreach ($http_response_header as $value) {
if (preg_match('/^Set-Cookie:\s*([^;]+)/', $value, $matches)) {
parse_str($matches[1], $tmp);
$cookies += $tmp;
}
}
$sessionId = "";
foreach ($cookies as $key => $value) {
if ($key == "ASP_NET_SessionId"){$sessionId = $value;}
}
//Checks the result and returns the sessionId
if (preg_match('<form name="aspnetForm" method="post" action="stravnik.aspx" id="aspnetForm">',$src)){
return array(true,$sessionId);
}else{
return array(false,null);
}
}
function strava_czCheck($sessionId){
//Sends request
$src = file_get_contents('http://m.strava.cz/Stravnik/objednavky.aspx',false,stream_context_create(array('http'=>array('header' => "User-Agent:(none; StravaCekujNET; Linux x86_64; rv:1.0)\r\nCookie: ASP_NETSession=".$sessionId."\r\n"))));
$src = mb_convert_encoding($src,'utf-8','auto'); //Zajistí správné kódování
echo $src; //Prints the response - "Application Error"
//Some irrelevant code here
//Returns the result
if ($arr==null) {return array(false,null);}
else {return array(true,$arr);}
}
服务器返回“应用程序错误”,就像您退出时一样。
不要问我为什么要这样做——我是问
【问题讨论】:
-
你可能最好查看 curl 库而不是 file_get_contents。只是我的 2 美分。
-
请详细说明“怎么了?”你遇到了什么错误?
-
@uzyn 我没有收到任何错误,第二个函数就像没有任何 cookie 一样工作 - 服务器返回登录表单。
标签: php cookies file-get-contents