当前位置: 首页 > 面试题库 >

如何找到使用cURL重定向到的位置?

戴博
2023-03-14
问题内容

我正在尝试使curl遵循重定向,但无法完全正常工作。我有一个字符串,我想将它作为GET参数发送到服务器并获取结果URL。

例:

字符串= Kobold害虫 网址= _www.wowhead.com/search?q=Kobold+Worker_

如果您转到该URL,它将把您重定向到“ www.wowhead.com/npc=257”。我希望curl将此URL返回到我的PHP代码,以便我可以提取“
npc = 257”并使用它。

当前代码:

function npcID($name) {
    $urltopost = "http://www.wowhead.com/search?q=" . $name;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
    curl_setopt($ch, CURLOPT_URL, $urltopost);
    curl_setopt($ch, CURLOPT_REFERER, "http://www.wowhead.com");
    curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type:application/x-www-form-urlencoded"));
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    return curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
}

但是,这将返回 _www.wowhead.com/search?q=Kobold+Worker_ 而不是 _www.wowhead.com/npc=257_

我怀疑PHP会在外部重定向发生之前返回。我怎样才能解决这个问题?


问题答案:

要使cURL遵循重定向,请使用:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

嗯…我认为您实际上并没有执行卷曲操作…请尝试:

curl_exec($ch);

…在设置选项之后,在curl_getinfo()通话之前。

编辑:如果您只是想找出页面重定向到的位置,我将在此处使用建议,然后使用Curl抓取标题并从中提取Location:标题:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
if (preg_match('~Location: (.*)~i', $result, $match)) {
   $location = trim($match[1]);
}


 类似资料:
  • 问题内容: 我正在通过Java访问网页,如下所示: 但是在某些情况下,一个URL重定向到另一个URL。所以我想知道以前的URL重定向到的URL。 以下是我作为响应得到的标题字段: 因此,目前,我正在根据标头字段的值构造重定向的url 。在上述情况下,重定向的网址为 有什么标准方法可以确定特定的URL将要重定向到哪个URL。 我知道,当一个URL重定向到其他URL时,服务器会发送一个中间响应,该响应

  • 问题内容: 从上一页收集到数据后,我想向客户显示另一页。但是我在服务器端重定向新URL时遇到麻烦。这是我的逻辑: 将带有POST操作的用户输入提交给服务器; 服务器运行函数saveChoice()将用户输入保存到数据库中; 保存用户输入后,服务器将新的URL发送给客户端。 当客户端获取新URL时,服务器读取数据库并取出保存的数据 我坚持执行第3步(这里是流程示例): 这是模板: 我可以知道如何重定

  • 我有一个fastAPIendpoint,它接收文件并将其保存到磁盘,如下所示: 当我通过的docs界面上传文件时,这是可以预期的。 但是,尝试与curl相同失败: curl命令不返回任何内容,并且在服务器端记录

  • 我有这样的数据。 从上述数据中细化“中位数”的最短方法是什么。我的结果应该是这样的... 中位数 = 1/2(n 1),其中 n 是样本中数据值的数量。

  • 问题内容: 我已经在我们的开发RedHat linux机器上获得了sudo访问权限,而且我似乎经常发现自己需要将输出重定向到我通常没有写访问权限的位置。 麻烦的是,这个人为的例子不起作用: 我刚收到回复: 我该如何工作? 问题答案: 您的命令无效,因为重定向是由您的外壳执行的,该外壳没有写权限。sudo 不 执行输出的重定向。 有多种解决方案: 使用sudo运行shell并使用以下选项向其提供命令

  • 我需要执行以下操作:我当前的地址如下所示:https://www.domain.com 我想用htaccess:www.domain重定向。通信https://www.domain.com和http://domain.com到https://www.domain.com 我在这里尝试了一些建议,但最终还是没完没了的循环。我试过: 任何帮助都将不胜感激。 更新:我想我已经做到了以下几点: 这样做对吗