我使用curl来填充表单。完成后,处理表单的其他脚本将重定向到另一个URL。我想将此重定向URL放入变量中。
lg40wkob1#
找到重定向URL的简单方法(如果你不想提前知道)
$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
字符串
uyto3xhc2#
你会用
curl_setopt($CURL, CURLOPT_HEADER, TRUE);
字符串并解析location头的头。
location
j91ykkif3#
在这里我得到了资源http头,然后我将头解析到数组$retVal中。我从这里得到了解析头的代码(http://www.bhootnath.in/blog/2010/10/parse-http-headers-in-php/)如果你有(PECL pecl_http >= 0.10.0),你也可以使用http://php.net/manual/en/function.http-parse-headers.php
$ch = curl_init(); $timeout = 0; curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_HEADER, TRUE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); // Getting binary data $header = curl_exec($ch); $retVal = array(); $fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $header)); foreach( $fields as $field ) { if( preg_match('/([^:]+): (.+)/m', $field, $match) ) { $match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1]))); if( isset($retVal[$match[1]]) ) { $retVal[$match[1]] = array($retVal[$match[1]], $match[2]); } else { $retVal[$match[1]] = trim($match[2]); } } } //here is the header info parsed out echo '<pre>'; print_r($retVal); echo '</pre>'; //here is the redirect if (isset($retVal['Location'])){ echo $retVal['Location']; } else { //keep in mind that if it is a direct link to the image the location header will be missing echo $_GET[$urlKey]; } curl_close($ch);
nmpmafwu4#
您可能希望将CURLOPT_FOLLOWLOCATION设置为true。或者将CURLOPT_HEADER设置为true,然后使用regexp获取Location头。
l2osamch5#
嗨。有一个新的简单方法。
CURLOPT_FOLLOWLOCATION
您可以使用CURLINFO_REDIRECT_URL:重定向上次交易中找到的URL
CURLINFO_REDIRECT_URL
$redirect_url = curl_getinfo($ch, CURLINFO_REDIRECT_URL);
您可以使用CURLINFO_EFFECTIVE_URL:最后请求的URL(在这种情况下是最后重定向URL)
CURLINFO_EFFECTIVE_URL
$redirect_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
型
5条答案
按热度按时间lg40wkob1#
找到重定向URL的简单方法(如果你不想提前知道)
字符串
uyto3xhc2#
你会用
字符串
并解析
location
头的头。j91ykkif3#
在这里我得到了资源http头,然后我将头解析到数组$retVal中。我从这里得到了解析头的代码(http://www.bhootnath.in/blog/2010/10/parse-http-headers-in-php/)如果你有(PECL pecl_http >= 0.10.0),你也可以使用http://php.net/manual/en/function.http-parse-headers.php
字符串
nmpmafwu4#
您可能希望将CURLOPT_FOLLOWLOCATION设置为true。
或者将CURLOPT_HEADER设置为true,然后使用regexp获取Location头。
l2osamch5#
嗨。有一个新的简单方法。
如果
CURLOPT_FOLLOWLOCATION
选项被禁用(您不会被自动重定向)您可以使用
CURLINFO_REDIRECT_URL
:重定向上次交易中找到的URL字符串
或者如果启用了
CURLOPT_FOLLOWLOCATION
选项(自动重定向)您可以使用
CURLINFO_EFFECTIVE_URL
:最后请求的URL(在这种情况下是最后重定向URL)型