我正在尝试使用wx/Python创建一个超级简单的虚拟输入/输出板.对于我将要存储数据的服务器的一个请求,我有以下代码:
data = urllib.urlencode({'q': 'Status'})
u = urllib2.urlopen('http://myserver/inout-tracker', data)
for line in u.readlines():
print line
Run Code Online (Sandbox Code Playgroud)
没有什么特别的东西在那里.我遇到的问题是,根据我阅读文档的方式,这应该执行一个Post Request,因为我提供了数据参数而且没有发生.我在该URL的索引中有此代码:
if (!isset($_POST['q'])) { die ('No action specified'); }
echo $_POST['q'];
Run Code Online (Sandbox Code Playgroud)
每次我运行我的Python应用程序时,都会在控制台上打印"未指定操作"文本.我将尝试使用请求对象来实现它,因为我已经看到了一些包含这些的演示,但我想知道是否有人可以帮助我解释为什么我没有获得带有此代码的Post Request.谢谢!
- 已编辑 -
此代码可以正常工作并正确发布到我的网页:
data = urllib.urlencode({'q': 'Status'})
h = httplib.HTTPConnection('myserver:8080')
headers = {"Content-type": "application/x-www-form-urlencoded",
"Accept": "text/plain"}
h.request('POST', '/inout-tracker/index.php', data, headers)
r = h.getresponse()
print r.read()
Run Code Online (Sandbox Code Playgroud)
我仍然不确定为什么urllib2库在我提供数据参数时不发布 - 对我来说文档表明它应该.
我需要从带有非ascii字符的URL获取数据,但urllib2.urlopen拒绝打开资源并引发:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0131' in position 26: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
我知道URL不符合标准,但我没有机会改变它.
什么是访问由包含使用Python非ASCII字符的URL指向的资源的方式吗?
编辑:换句话说,可以/如何urlopen打开一个URL,如:
http://example.org/Ñöñ-Å?Ç??/
Run Code Online (Sandbox Code Playgroud) 好吧,所以我将它用于reddit机器人,但我希望能够弄清楚如何登录任何网站.如果这是有道理的....
我意识到不同的网站使用不同的登录表单等.那么我如何找出如何为每个网站优化它?我假设我需要在html文件中查找内容但不知道是什么.
我不想使用Mechanize或任何其他库(这是所有其他答案都在这里,而不是实际上帮助我了解正在发生的事情),因为我想自己学习它究竟是如何工作的.
urllib2文档真的没有帮助我.
谢谢.
当使用python对网页进行屏幕抓取时,必须知道页面的字符编码.如果你得到的字符编码错误,你的输出就会搞砸了.
人们通常使用一些基本技术来检测编码.它们使用标题中的字符集或元标记中定义的字符集,或者使用编码检测器(不关心元标记或标题).通过仅使用这些技术,有时您将无法获得与浏览器相同的结果.
浏览器这样做:
(嗯......至少这是我认为大多数浏览器都这样做的方式.文档非常缺乏.)
我正在寻找的是一个可以像浏览器一样决定页面字符集的库.我确信我不是第一个需要妥善解决这个问题的人.
美丽的汤按优先级顺序尝试以下编码,将您的文档转换为Unicode:
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.open('http://abc.com')
opener.open('http://google.com')
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用开瓶器访问不同的网站,使用cookie罐.我可以设置一个标题,以便每次有网站时,都会应用标题吗?
如果我使用urllib2打开文件,如下所示:
remotefile = urllib2.urlopen('http://example.com/somefile.zip')
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来获取文件名,然后解析原始URL?
编辑:将openfile更改为urlopen ...不确定是怎么回事.
编辑2:我最终使用:
filename = url.split('/')[-1].split('#')[0].split('?')[0]
Run Code Online (Sandbox Code Playgroud)
除非我弄错了,否则这也应该删除所有潜在的查询.
我正在urllib2阅读页面.我需要在源代码上做一个快速的正则表达式并提取一些变量但是urllib2作为文件对象而不是字符串呈现.
我是python的新手,所以我很难看到我如何使用文件对象来做到这一点.有没有快速的方法将其转换为字符串?
我想在引发URLError异常后抓取HTTP状态代码:
我尝试了这个,但没有帮助:
except URLError, e:
logger.warning( 'It seems like the server is down. Code:' + str(e.code) )
Run Code Online (Sandbox Code Playgroud) 在Python中,我使用urllib2打开一个url.此网址重定向到另一个网址,该网址会重定向到另一个网址.
我希望在每次重定向后打印出url.
例如
- > =重定向到
A - > B - > C - > D.
我想打印B,C和D的URL(A已经知道,因为它是起始URL).