- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 urllib2 使用 Python 2.7.3 执行 http post 请求。我的请求返回 HTTPError 异常(HTTP 错误 502:代理错误)。
查看 Charles 的消息流量,我看到发生了以下情况:
502 回复在响应正文中包含此内容:“DNS 查找失败:10.0.0.30:80index.asp”(注意格式错误的 URL)
所以我认为这意味着远程服务器网络上的代理服务器看到了请求中的“/../index.asp”URL 并对其进行了误解,从而使用错误的 URL 发送了我的请求。
当我用我的浏览器 (Chrome) 发出相同的请求时,重试被发送到 GET/index.asp?action=news。因此 Chrome 去掉了 URL 中的前导“/..”,远程服务器回复了一个有效的响应。
这是 urllib2 错误吗?我可以做些什么让重试忽略 URL 中的“/..”吗?还是有其他方法可以解决这个问题?认为这可能是 urllib2 错误,我用 requests 换掉了 urllib2,但 requests 产生了相同的结果。当然,这可能是因为 requests 是建立在 urllib2 之上的。
感谢您的帮助。
最佳答案
与 302 一起发送的位置在多个方面都是错误的。
首先,如果您阅读 RFC2616 (HTTP/1.1 Header Field Definitions) 14.30 Location,Location 必须是一个绝对的URI,而不是一个相对的URI。并且10.3.3节明确了这是相关的定义。
其次,即使允许相对 URI,RFC 1808 , Relative Uniform Resource Locators, 4. Resolving Relative URLs, step 6, 只指定对..
的特殊处理在模式中 <segment>/../
.这意味着相对 URL 不应以 ..
开头.所以,即使基本 URL 是 http://example.com/foo/bar/
并且相对 URL 是 ../baz/
, 解析的 URL 不是 http://example.com/foo/baz/
,但是http://example.com/foo/bar/../baz
. (当然大多数服务器会以相同的方式处理这些,但这取决于每个服务器。)
最后,即使您在解析 ..
之前确实合并了相对 URL 和基本 URL , 一个绝对 URI,其路径以 ..
开头无效。
因此,错误出在服务器的配置中。
现在,碰巧许多用户代理会解决这个错误。特别是,他们转/../foo
进入/foo
阻止用户(或在他们不知情的情况下代表他们运行的任意 JS)尝试进行“逃离 webroot”攻击。
但这并不意味着 urllib2
应该这样做,或者不这样做是错误的。当然urllib2
应该更早地检测到错误,以便它可以告诉您“无效路径”或其他内容,而不是一起运行非法的绝对 URI,这会使服务器混淆并向您发送无意义的错误。但失败是是对的。
说服务器配置错误这一切都很好,但除非您是服务器的负责人,否则您可能会面临一场艰苦的战斗,试图说服他们他们的网站已损坏并且需要当它与他们关心的每个网络浏览器一起工作时被修复。这意味着您可能需要编写自己的解决方法来处理他们的网站。
用 urllib2
做到这一点的方法就是自备 HTTPRedirectHandler
实现 redirect_request
识别这种情况并返回不同的 Request
的方法比默认代码(特别是 http://example.com/index.asp?action=news
而不是 http://example.com/../index.asp?action=news
)。
关于python - 奇怪的重定向位置导致 urllib2 出现代理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13371534/
我有这种来自 Google map 自动完成的奇怪行为(或者我可能错过了某事)...想法?奇怪的: 您在输入中输入某物,例如“伦敦” 您按 [ENTER] 你按下 [CLEAR] 按钮 你点击进入'输
这段代码与《Learning Java》(Oracle Press Books)一书中的代码完全一样,但它不起作用。我不明白为什么它不起作用,它应该起作用。我用 OpenJDK 和 Sun JDK 7
示例 1 中究竟发生了什么?这是如何解析的? # doesnt split on , [String]::Join(",",("aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aa
我需要获得方程式系统的解决方案。为此,我使用函数sgesv_()。 一切都很好,它使我感到解决方案的正确结果。 但是我得到一个奇怪的警告。 警告:从不兼容的指针类型传递'sgesv_'的参数3 我正在
我目前在制作动画时遇到一个奇怪的问题: [UIView animateWithDuration:3 delay:0
alert('works'); $(window).load(function () { alert('does not work'); });
我的代码: public class MyTest { public class StringSorter implements Comparator { public
我正在学习 JavaScript。尝试理解代码, function foo (){ var a = b = {name: 'Hai'}; document.write(a.name +''
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
这按预期工作: [dgorur@ted ~]$ env -i env [dgorur@ted ~]$ 这样做: [dgorur@ted ~]$ env -i which date which: no
struct BLA { int size_; int size()const{ return size_; } } int x; BLA b[ 2 ]; BLA * p = &b[
我有以下代码: #test img {vertical-align: middle;} div#test { border: 1px solid green; height: 150px; li
我想大多数使用过 C/C++ 的人都对预处理器的工作原理有一定的直觉(或多或少)。直到今天我也是这么认为的,但事实证明我的直觉是错误的。故事是这样的: 今天我尝试了一些东西,但我无法解释结果。首先考虑
我想为 TnSettings 做 mock,是的,如果通过以下方法编写代码,它就可以工作,问题是我们需要为每个案例编写 mock 代码,如果我们只 mock 一次然后执行多个案例,那么第二个将报告异常
我的项目中有以下两个结构 typedef volatile struct { unsigned char rx_buf[MAX_UART_BUF]; //Input buffer over U
Regex rx = new Regex(@"[+-]"); string[] substrings = rx.Split(expression); expression = "-9a3dcb
我的两个应用程序遇到了一个奇怪的问题。这是设置: 两个 tomcat/java 应用程序,在同一个网络中运行,连接到相同的 MS-SQL-Server。一个应用程序,恰好按顺序位于 DMZ 中可从互联
我目前正在与 Android Api Lvl 8 上的 OnLongClickListener 作斗争。 拿这段代码: this.webView.setOnLongClickListener(new
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
只是遇到了奇怪的事情。我有以下代码: -(void)ImageDownloadCompleat { [self performSelectorOnMainThread:@selector(up
我是一名优秀的程序员,十分优秀!