在本文中,您将会了解到关于使用PythonScrapy时的HTTP403响应的新资讯,同时我们还将为您解释scrapypost请求的相关在本文中,我们将带你探索使用PythonScrapy时的HTTP
在本文中,您将会了解到关于使用Python Scrapy时的HTTP 403响应的新资讯,同时我们还将为您解释scrapy post请求的相关在本文中,我们将带你探索使用Python Scrapy时的HTTP 403响应的奥秘,分析scrapy post请求的特点,并给出一些关于403禁止vs 401未经授权的HTTP响应 - 403 Forbidden vs 401 Unauthorized HTTP responses、Flask Python中带有Http的Https、httplib2---python下的http请求终结者(转)、Python CGI返回http状态代码,例如403?的实用技巧。
本文目录一览:- 使用Python Scrapy时的HTTP 403响应(scrapy post请求)
- 403禁止vs 401未经授权的HTTP响应 - 403 Forbidden vs 401 Unauthorized HTTP responses
- Flask Python中带有Http的Https
- httplib2---python下的http请求终结者(转)
- Python CGI返回http状态代码,例如403?
使用Python Scrapy时的HTTP 403响应(scrapy post请求)
我在Windows Vista 64位上使用Python.org版本2.7
64位。我一直在测试以下Scrapy代码,以递归方式擦除网站www.whoscored.com上用于足球统计的所有页面:
from scrapy.contrib.spiders import CrawlSpider,Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector
from scrapy.item import Item
from scrapy.spider import BaseSpider
from scrapy import log
from scrapy.cmdline import execute
from scrapy.utils.markup import remove_tags
class ExampleSpider(CrawlSpider):
name = "goal3"
allowed_domains = ["whoscored.com"]
start_urls = ["http://www.whoscored.com/"]
rules = [Rule(SgmlLinkExtractor(allow=()),follow=True),Rule(SgmlLinkExtractor(allow=()),callback='parse_item')
]
def parse_item(self,response):
self.log('A response from %s just arrived!' % response.url)
scripts = response.selector.xpath("normalize-space(//title)")
for scripts in scripts:
body = response.xpath('//p').extract()
body2 = "".join(body)
print remove_tags(body2).encode('utf-8')
execute(['scrapy','crawl','goal3'])
该代码正在执行,没有任何错误,但是在刮取的4623个页面中,有217个的HTTP响应代码为200,第2个的代码为302,第4404个的代码为403。任何人都可以在代码中立即看到任何关于为什么会这样的明显信息吗?难道这是该站点的一项防刮措施?是否通常通过减慢提交次数来阻止这种情况的发生?
谢谢
403禁止vs 401未经授权的HTTP响应 - 403 Forbidden vs 401 Unauthorized HTTP responses
问题:
For a web page that exists, but for which a user does not have sufficient privileges (they are not logged in or do not belong to the proper user group), what is the proper HTTP response to serve? 对于存在的网页,但用户没有足够特权(他们没有登录或不属于适当的用户组)的网页,可以提供什么适当的HTTP响应?
401 Unauthorized
? 401 Unauthorized
?
403 Forbidden
? 403 Forbidden
吗?
Something else? 还有吗
What I''ve read on each so far isn''t very clear on the difference between the two. 到目前为止,我对两者的区别还不清楚。 What use cases are appropriate for each response? 每种使用情况适合哪些用例?
解决方案:
参考一: https://stackoom.com/question/DpiC/禁止vs-未经授权的HTTP响应参考二: https://oldbug.net/q/DpiC/403-Forbidden-vs-401-Unauthorized-HTTP-responses
Flask Python中带有Http的Https
如何解决Flask Python中带有Http的Https?
第一件事:不要使用flask中内置的Web服务器进行繁重的工作。您应该使用真实的Web服务器,例如apache(mod_wsgi)nginex + gunicore等。这些服务器包含有关如何同时运行http和https的文档
解决方法
我有一个客户端服务器应用程序。我设法使他们使用SSl加密通过https连接
context = SSL.Context(SSL.SSLv3_METHOD)
context.use_privatekey_file(''/path_to_key/key.key'')
context.use_certificate_file(''/path_to_cert/cert.crt'')
app.run(use_reloader=True,host=''0.0.0.0'',port=9020,ssl_context = context)
现在,我想同时使用http和https运行服务器。有什么可行的方法吗?
httplib2---python下的http请求终结者(转)
httplib2---python下的http请求终结者(转)
httplib2功能介绍:http://code.google.com/p/httplib2/
httplib2实例页面:http://code.google.com/p/httplib2/w/list
httplib2问题提交:http://code.google.com/p/httplib2/issues/list
好吧,我觉得官方的样例还是比较全的,这里就直接贴一下吧。
Simple Retrieval
import httplib2
h = httplib2.Http(".cache")
resp, content = h.request("http://example.org/", "GET")
Authentication
import httplib2
h = httplib2.Http(".cache")
h.add_credentials(''name'', ''password'')
resp, content = h.request("https://example.org/chap/2", ##ssl + base认证
"PUT", body="This is text",
headers={''content-type'':''text/plain''} )
Cache-Control
import httplib2
h = httplib2.Http(".cache")
resp, content = h.request("http://bitworking.org/") #请求被缓存,下次还会用这个缓存而不去发送新的请求,缓存生效时间有web配置决定
...
resp, content = h.request("http://bitworking.org/",
headers={''cache-control'':''no-cache''}) ##设置不用缓存,当次将不用缓存,而是直接发一个新的请求
Forms
>>> from httplib2 import Http
>>> from urllib import urlencode
>>> h = Http()
>>> data = dict(name="Joe", comment="A test comment")
>>> resp, content = h.request("http://bitworking.org/news/223/Meet-Ares", "POST", urlencode(data))
>>> resp
{''status'': ''200'', ''transfer-encoding'': ''chunked'', ''vary'': ''Accept-Encoding,User-Agent'',
''server'': ''Apache'', ''connection'': ''close'', ''date'': ''Tue, 31 Jul 2007 15:29:52 GMT'',
''content-type'': ''text/html''}
Cookies
#!/usr/bin/env python
import urllib
import httplib2
http = httplib2.Http()
url = ''http://www.example.com/login''
body = {''USERNAME'': ''foo'', ''PASSWORD'': ''bar''}
headers = {''Content-type'': ''application/x-www-form-urlencoded''}
response, content = http.request(url, ''POST'', headers=headers, body=urllib.urlencode(body))
headers = {''Cookie'': response[''set-cookie'']} ###将获得cookie设置到请求头中,以备下次请求使用
url = ''http://www.example.com/home''
response, content = http.request(url, ''GET'', headers=headers) ##本次请求就不用带用户名,密码了
Proxies
import httplib2
import socks ##需要第三方模块
httplib2.debuglevel=4
h = httplib2.Http(proxy_info = httplib2.ProxyInfo(socks.PROXY_TYPE_HTTP, ''localhost'', 8000))
r,c = h.request("http://bitworking.org/news/")
======================================================================================
下面是我自己对模块功能的尝试:
Http对象的构造方法:
__init__(self, cache=None, timeout=None, proxy_info=None, ca_certs=None, disable_ssl_certificate_validation=False)
proxy_info 的值是一个 ProxyInfo instance.
|
| ''cache'':
存放cache的位置,要么为字符串,要么为支持文件缓存接口的对象
|
| timeout:
超时时间,默认时会取python对socket链接超时的值
|
| ca_certs:
一个用于ssl服务器认证用的包涵了主CA认证的文件路径,默认会使用httplib2绑定的证书
|
| disable_ssl_certificate_validation:
确定是否进行ssl认证
|
| add_certificate(self, key, cert, domain)
| 添加一个ssl认证key和文件
|
| add_credentials(self, name, password, domain='''')
| 添加一个用户名,密码信息
|
| clear_credentials(self)
| 删除掉所有的用户名,密码信息,貌似还是可以存多个用户名和密码
Http.request(self, uri, method=''GET'', body=None, headers=None, redirections=5, connection_type=None)
说明:
执行单次的http请求
uri:
一个以''http'' 或 ''https''开头的资源定位符字串,必须是一个绝对的地址
method:
支持所有的http请求方式。如: GET, POST, DELETE, etc..
body:
请求的附件数据,一个经过urllib.urlencode编码的字符串
headers:
请求头信息,一个字典对象
redirections:
最大的自动连续的重定向次数默认为5
返回:
(response, content)元组,response是一个httplib2.Response对象,content就是包含网页源码的字符串
httplib2.Response对象
其实就是一个包含所有头信息的字典,因为它本身就是集成自字典对象的
Python CGI返回http状态代码,例如403?
我的python cgi如何返回特定的http状态代码,例如403或418?
我尝试了明显的操作(打印“ Status:403 Forbidden”),但是它不起作用。
关于使用Python Scrapy时的HTTP 403响应和scrapy post请求的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于403禁止vs 401未经授权的HTTP响应 - 403 Forbidden vs 401 Unauthorized HTTP responses、Flask Python中带有Http的Https、httplib2---python下的http请求终结者(转)、Python CGI返回http状态代码,例如403?等相关内容,可以在本站寻找。
本文标签: