【问题标题】:How to handle redirecting urls with get parameters in the request?如何处理请求中带有获取参数的重定向 url?
【发布时间】:2012-05-11 10:35:37
【问题描述】:

我正在尝试从服务器 (aspx) 获取 html 响应。

NSString *urlstr = [[NSString alloc] initWithFormat:@"http://www.someSiteThatRedirectsWithGetParameters.com?parameter1=1&parameter2=2"];

NSURL *url = [ NSURL URLWithString:urlstr];     
NSMutableURLRequest *urlRequest = [ NSURLRequest requestWithURL: url];

NSData data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];

NSURL *lastURL=[response URL];

NSLog(@"Last url %@", lastURL);

我将 lastURL 作为 www.someSiteThatRedirectsWithGetParameters.com 获取,因此没有获取原始请求 url 的 html 页面。

为什么会这样,我该如何解决?

编辑

这就是我到目前为止所尝试的全部:Get the last redirected url in iOS 5? 但我仍然无法实现我想要的,即:获取在 url 中有参数的原始 GET 请求(通过重定向)的 html 页面源?

【问题讨论】:

  • 一个需要参数的网站不应该重定向...最好使用后请求,这样人们就不能那么容易地弄清楚你在发送什么。
  • 我不是运营网站的人,因此无法控制网站应该做什么或不应该做什么,我是发送请求的人,因此是问题!

标签: ios nsurl response.redirect


【解决方案1】:

我将 lastURL 作为 www.someSiteThatRedirectsWithGetParameters.com 因此没有得到原始请求的 html 页面 网址。

如果您的请求被重定向,那是因为您要连接的服务器告诉您,您第一次发出请求的 URL 中没有页面,您应该改用重定向的 URL。这就是重定向响应的全部意义所在。

如果您收到的响应是HTTP 303,则新请求将正确地从 POST 更改为 GET。有时这样做是为了避免刷新页面会重新提交原始请求而产生不良后果的情况。在这种情况下,您将请求发布到某个 URL,服务器接受请求,但通过将客户端重定向到最终显示服务器响应的不同 URL 来响应。

为什么会这样,我该如何解决?

我已经解释了上面的“为什么”。 “解决方案”是接受来自服务器的响应,并按照重定向到包含服务器响应的 URL。

【讨论】:

  • 令人困惑的是,当我在网络浏览器中使用原始请求时,请求的页面确实被加载,但当我使用代码获取 html 数据时,情况并非如此:(
  • 查看此链接:bookfinder4u.com/… 这就是我提到的行为之一。当您通过浏览器打开该链接时,您将获得搜索页面,但是当您使用同步/异步 http 请求请求同一页面时,您将获得的数据将是主页(bookfinder4u.com
  • 然后你需要查看你发送的请求和浏览器发送的请求,看看它们之间有什么不同。这可能会帮助您弄清楚服务器响应不同的原因。可能是服务器无法识别您发送的用户代理,或者浏览器不喜欢您的请求中包含(或不包含)的其他标头。在这些情况下,Charles proxy 之类的工具非常有用。
  • 即使我认为它与用户代理有关,但使用 get page 与命令行一起工作。我会按照你的建议安装 Charles Proxy 看看发生了什么
  • 好的。因此,Charles Proxy 给出了 200 响应,这意味着如果通过浏览器请求它不会重定向到主页,但在通过 ios 代码时它会重定向。
【解决方案2】:

我会尝试发送两个请求的方法。发送第一个请求,redirectURL 将是响应。然后创建响应的新 URL,使用 GET 参数向该 URL 发送请求。我没试过,但我想它可以工作。

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    相关资源
    最近更新 更多