我有一个来自HTTP标头的字符串,但它已被转义..我可以使用什么功能来解决它?
myemail%40gmail.com -> myemail@gmail.com
Run Code Online (Sandbox Code Playgroud)
urllib.unquote()是否可行?
我正在尝试编写一个函数来发布表单数据并将返回的cookie信息保存在文件中,以便下次访问页面时,cookie信息将被发送到服务器(即正常的浏览器行为).
我使用curlib在C++中相对容易地编写了这个,但是花了将近一整天的时间尝试使用urllib2在Python中编写它 - 但仍然没有成功.
这是我到目前为止:
import urllib, urllib2
import logging
# the path and filename to save your cookies in
COOKIEFILE = 'cookies.lwp'
cj = None
ClientCookie = None
cookielib = None
logger = logging.getLogger(__name__)
# Let's see if cookielib is available
try:
import cookielib
except ImportError:
logger.debug('importing cookielib failed. Trying ClientCookie')
try:
import ClientCookie
except ImportError:
logger.debug('ClientCookie isn\'t available either')
urlopen = urllib2.urlopen
Request = urllib2.Request
else:
logger.debug('imported ClientCookie succesfully')
urlopen = ClientCookie.urlopen
Request = ClientCookie.Request
cj = ClientCookie.LWPCookieJar() …Run Code Online (Sandbox Code Playgroud) 示例代码:
#!/usr/bin/python
import socks
import socket
import urllib2
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS4, "127.0.0.1", 9050, True)
socket.socket = socks.socksocket
print urllib2.urlopen("http://almien.co.uk/m/tools/net/ip/").read()
Run Code Online (Sandbox Code Playgroud)
TOR在端口9050上运行SOCKS代理(默认值).该请求通过TOR,在我自己以外的IP地址上显示.但是,TOR控制台会发出警告:
"2月28日22:44:26.233 [警告]你的应用程序(使用socks4到端口80)只给Tor一个IP地址.做DNS解析的应用程序本身可能泄漏信息.考虑使用Socks4A(例如通过privoxy或socat).有关详细信息,请参阅 https://wiki.torproject.org/TheOnionRouter/TorFAQ#SOCKSAndDNS."
即DNS查找不通过代理.但这就是setdefaultproxy应该做的第4个参数,对吧?
来自http://socksipy.sourceforge.net/readme.txt:
setproxy(proxytype,addr [,port [,rdns [,username [,password]]]])
rdns - 这是一个布尔标志,而不是修改DNS解析的行为.如果设置为True,则将在服务器上远程执行DNS解析.
选择PROXY_TYPE_SOCKS4和PROXY_TYPE_SOCKS5时效果相同.
它不能是本地DNS缓存(如果urllib2甚至支持它),因为当我将URL更改为此计算机以前从未访问过的域时会发生这种情况.
我有一点时间使用Python的urllib2来获取异步/线程HTTPS请求.
有没有人有一个基本的例子来实现urllib2.Request,urllib2.build_opener和urllib2.HTTPSHandler的子类?
谢谢!
根据urllib2文档,
由于默认处理程序处理重定向(300范围内的代码),并且100-299范围内的代码表示成功,因此通常只能看到400-599范围内的错误代码.
然而,以下代码
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
Run Code Online (Sandbox Code Playgroud)
使用代码201(已创建)引发HTTPError:
ERROR 2011-08-11 20:40:17,318 __init__.py:463] HTTP Error 201: Created
Run Code Online (Sandbox Code Playgroud)
那么为什么要urllib2在这个成功的请求上抛出HTTPErrors呢?
这不是太痛苦; 我可以轻松地将代码扩展到:
try:
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
except HTTPError, e:
if e.code == 201:
# success! :)
else:
# fail! :(
else:
# when will this happen...?
Run Code Online (Sandbox Code Playgroud)
但这似乎不是预期的行为,基于文档和我无法找到关于这种奇怪行为的类似问题的事实.
此外,该else块应该期待什么?如果成功的状态代码都被解释为HTTPErrors,那么什么时候urllib2.urlopen()只返回一个类似于文件的正常响应对象,就像所有urllib2文档所指的那样?
之前已经在这里提出过这个问题.对于提问者和回答者来说,接受的答案可能是显而易见的 - 但不是对我而言.我已就上述问题发表评论以获得更多精确度,但没有回应.我还向meta Q&A索取了关于如何从他们的坟墓中提出问题的帮助,也没有得到答案.
上面问题的答案是:
从客户端的角度来看,OpenID登录与任何其他基于Web的登录非常相似.客户端没有定义的协议; 它是一个普通的Web会话,根据您的OpenID提供程序而有所不同.出于这个原因,我怀疑是否存在任何此类库.您可能需要自己编写代码.
我知道如何使用Urllib2模块登录使用Python的网站.但这还不足以让我猜测如何对OpenID进行身份验证.
我实际上是想以json格式获取我的StackOverflow收件箱,我需要登录.
有人可以提供一个简短的介绍或链接到一个很好的教程如何做到这一点?
对于此代码:
import sys
import gevent
from gevent import monkey
monkey.patch_all()
import requests
import urllib2
def worker(url, use_urllib2=False):
if use_urllib2:
content = urllib2.urlopen(url).read().lower()
else:
content = requests.get(url, prefetch=True).content.lower()
title = content.split('<title>')[1].split('</title>')[0].strip()
urls = ['http://www.mail.ru']*5
def by_requests():
jobs = [gevent.spawn(worker, url) for url in urls]
gevent.joinall(jobs)
def by_urllib2():
jobs = [gevent.spawn(worker, url, True) for url in urls]
gevent.joinall(jobs)
if __name__=='__main__':
from timeit import Timer
t = Timer(stmt="by_requests()", setup="from __main__ import by_requests")
print 'by requests: %s seconds'%t.timeit(number=3)
t = Timer(stmt="by_urllib2()", setup="from __main__ import …Run Code Online (Sandbox Code Playgroud) 我正在尝试从公共站点asx.com.au获取数据
页面http://www.asx.com.au/asx/research/company.do#!/ACB/details包含一个div类"view-content",它包含我需要的信息:
但是当我尝试通过Python查看此页面时urllib2.urlopendiv为空:
import urllib2
from bs4 import BeautifulSoup
url = 'http://www.asx.com.au/asx/research/company.do#!/ACB/details'
page = urllib2.urlopen(url).read()
soup = BeautifulSoup(page, "html.parser")
contentDiv = soup.find("div", {"class": "view-content"})
print(contentDiv)
# the results is an empty div:
# <div class="view-content" ui-view=""></div>
Run Code Online (Sandbox Code Playgroud)
是否可以通过编程方式访问该div的内容?
编辑:根据评论,显示内容通过Angular.js.是否可以通过Python触发该内容的呈现?
我想使用python urllib2来模拟登录操作,我使用Fiddler来捕获数据包并得到登录操作只是一个ajax请求,用户名和密码作为json数据发送,但我不知道如何使用urllib2发送json数据,帮忙......
我一直在使用亚马逊的产品广告API来生成包含给定图书价格的网址.我生成的一个网址如下:
当我点击链接或粘贴地址栏上的链接时,网页加载正常.但是,当我执行以下代码时,我收到一个错误:
url = "http://www.amazon.com/gp/offer-listing/0415376327%3FSubscriptionId%3DAKIAJZY2VTI5JQ66K7QQ%26tag%3Damaztest04-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3D0415376327"
html_contents = urllib2.urlopen(url)
Run Code Online (Sandbox Code Playgroud)
错误是urllib2.HTTPError:HTTP错误503:服务不可用.首先,我不明白为什么我甚至会因为网页成功加载而出现此错误.
此外,我注意到的另一个奇怪的行为是,以下代码有时会做,有时不会给出指定的错误:
html_contents = urllib2.urlopen("http://www.amazon.com/gp/offer-listing/0415376327%3FSubscriptionId%3DAKIAJZY2VTI5JQ66K7QQ%26tag%3Damaztest04-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3D0415376327")
Run Code Online (Sandbox Code Playgroud)
我完全迷失了这种行为的发生方式.是否有任何修复或解决方法?我的目标是阅读网址的html内容.
编辑
我不知道为什么堆栈溢出正在改变我的代码,以便将我在上面列出的amazon链接更改为rads.stackoverflow.无论如何,忽略rads.stackoverflow链接并在引号之间使用上面的链接.