Python HTTP错误505:不支持HTTP版本

2024-05-18 20:36:09 发布

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

我有以下代码:

import re
from re import sub

import cookielib
from cookielib import CookieJar
import urllib2
from urllib2 import urlopen

cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders=[('user-agent' , 'Safari/7.0.2')]

def check(word):
    try:
        query = "select * from geo.places where text ='"+word+"'"
        sourceCode=opener.open('http://query.yahooapis.com/v1/public/yql?q='+query+'&diagnostics=true').read()
        print sourceCode
    except Exception, e:
        print str(e)
        print 'ERROR IN MAIN TRY'

myStr = ['I','went','to','Boston']
for item in myStr:
        check(item)

我试图查询select * from geo.places where text = 'Boston'(例如)。

我一直收到这个错误:

    HTTP Error 505: HTTP Version Not Supported
    ERROR IN MAIN TRY

什么会导致这个错误?我该如何解决?


Tags: fromimportrecheckopenerurllib2queryselect
3条回答

不确定,出了什么问题,但是当我尝试使用requests库执行相同的操作时,它可以工作:

>>> import requests
>>> word = "Boston"
>>> query = "select * from geo.places where text ='"+word+"'"
>>> query
"select * from geo.places where text ='Boston'"
>>> baseurl = 'http://query.yahooapis.com/v1/public/yql?q='
>>> url = baseurl + query
>>> url
"http://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text ='Boston'"
>>> req = requests.get(url)
>>> req
<Response [200]>
>>> req.text
u'<?xml version="1.0" encoding="UTF-8"?>\n<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="10" yahoo:created="2014-05-17T21:12:52Z" yahoo:lang="en-US"><results><place xmlns="http://where.yahooapis.com/v1/schema.rng" xml:lang="en-US" yahoo:uri="http://where.yahooapis.com/v1/place/2367105"><woeid>2367105</woeid><placeTypeName code="7">Town</placeTypeName><name>Boston</name><country code="US" type="Country" woeid="23424977">United States</country><admin1 code="US-MA" type="State" woeid="2347580">Massachusetts</admin1><admin2 code="" type="County" woei....

注意,这是有区别的,我的代码要简单得多,它不适用于cookies,也不试图假装Safari浏览器。

如果您需要将cookies与requests一起使用,您将在那里找到非常好的支持。

您构造的URL不是有效的URL。你送的是

GET /v1/public/yql?q=select * from geo.places where text ='I'&diagnostics=true HTTP/1.1
Accept-Encoding: identity
Host: query.yahooapis.com
Connection: close
User-Agent: Safari/7.0.2

URL中不应该有空格,例如,必须进行正确的URL编码(用“+”等替换空格)。我想请求只是帮你修复了错误的URL。

查询之间可能有空格。请求处理url中的空白,因此不必处理它。 只需将每个“”替换为%20即可使url正常工作。

相关问题 更多 >

    热门问题