向URL字符串添加带有反斜杠字符的变量时发生Python错误

2024-04-29 09:39:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个网站上获取一些数据,这个网站分配了一个会话cookie并生成了一个包含crump代码的HTML,我需要将其附加到URL以获取数据。当crum变量包含反斜杠时,我遇到了问题(HTTP 401未经授权)。。。因为面包屑是一个变量,所以我不知道如何在开头加上r'。我尝试过将.encode('string-escape')和.replace('\\','\\\\')添加到crump变量中,但我无法使其工作。在

我在python 2.7中的代码如下所示:

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))    
opener.open('http://www.sample.com')

#Some code here that looks for crumb code in HTML

crumb = 'abc\xyz'

#This line fails when crumb contains a backslash
opener.open('http://www.sample.com/data=' + crumb)

cj.clear()

有人知道我在试图打开包含反斜杠的URL字符串时如何避免401错误吗?在

另外,如果我循环使用多个碎屑,是否需要每次清除会话cookie?在

更新:原来反斜杠是从HTML中的\u002F引入的。我相信,如果在将字符串添加到URL之前将其转换为正斜杠,它将起作用。如何将字符串中的\u002F转换为/?


Tags: 字符串代码httpurl网站cookiehtmlwww
2条回答

这里的问题是“\”是python中的转义字符,因此要使其成为不包含任何特殊字符的原始字符串,必须在该字符串之前添加一个“r”。你的代码应该是这样的

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))    
opener.open('http://www.sample.com')

#I'm adding a 'r' before the string

crumb = r'abc\xyz'

opener.open('http://www.sample.com/data=' + crumb)

cj.clear()

编辑:您可能需要对“\”进行编码才能正确格式化url请求。所以“\”应该是“%5C”。在

因为您不能使用crumb = r'abc\xyz'。我相信str.encode('string-escape')函数可能会有所帮助。尝试:

crumb = 'abc\xyz'
crumb.encode('string-escape')

相关问题 更多 >