我正在尝试学习匿名的http请求并取得了一些成功,但我最近的尝试是不接受我的请求(requesocks.exceptions.HTTPError:400 Client Error)。我使用tor来获取匿名IP。这是我的代码:
from fake_useragent import UserAgent
import requests
import requesocks
def newUserAgent():
"adds a new User-Agent item to HEADERS dictionary"
HEADERS['User-Agent'] = UA.random
def newUrl():
"increments CurrentPage and returns url"
url = 'http://www.realtor.ca/Residential/Map.aspx#CultureId=1&ApplicationId=1&RecordsPerPage=9&MaximumResults=9&PropertyTypeId=300&TransactionTypeId=2' \
'&StoreyRange=0-0&OwnershipTypeGroupId=1&BuildingTypeId=1&BedRange=0-0&BathRange=0-0&LongitudeMin=-119.66980648040801&LongitudeMax=-119.58174419403106' \
'&LatitudeMin=49.822197219797346&LatitudeMax=49.84943388971021&SortOrder=A&SortBy=1&viewState=l&Longitude=-119.487716674805&Latitude=49.8434562683105' \
'&CurrentPage=' + str(CURRENT_PAGE + 1)
return url
def getDataDict():
"returns data_dict from msl.ca url"
# Reset User-Agent in HEADERS, increment CurrentPage in url
newUserAgent()
url = newUrl()
# Check visible IP
ip = SESSION.get("http://icanhazip.com/")
print "visible IP is:", ip.text
# Request the URL
response = SESSION.get(url, headers=HEADERS)
response.raise_for_status() # raise exception if invalid response
def main():
getDataDict()
#------------------------
# global objects:
#------------------------
CURRENT_PAGE = 0
UA = UserAgent()
HEADERS = {
'Host': 'www.realtor.ca',
'Accept': '*/*',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Referer': 'http://www.realtor.ca/Residential/Map.aspx',
'Content-Length': '411',
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache'
}
#Initialize a new wrapped requests object
SESSION = requesocks.session()
#Use Tor for both HTTP and HTTPS
SESSION.proxies = {'http': 'socks5://localhost:9050', 'https': 'socks5://localhost:9050'}
if __name__ == '__main__':
main()
我在这里做错了什么? IP打印正常(即对http://icanhazip.com/的请求工作正常,但后续URL没有 - 有什么不同?)
答案 0 :(得分:0)
服务器正在返回fx:controller="some.package.MyController"
您无法在其中发出包含锚文本(HTTP Error 400. The request URL is invalid.
)的HTTP请求。
哈希标记(#)及其后面的所有内容都不会在HTTP请求中发送。大量使用Ajax的站点(如您尝试使用的站点)将使用Javascript读取锚文本,然后发出Ajax请求以更新内容。
通过快速查看他们的网站,来自锚标记的请求通过Ajax请求到URL #CultureId...
,帖子正文中包含锚文本。
从Cookie的外观来看,您需要先向http://www.realtor.ca/api/Listing.svc/PropertySearch_Post
发出建立会话Cookie的请求,然后您可以尝试使用搜索参数向/Residential/Map.aspx
网址发出请求。它返回一个JSON响应,您必须解析它以对搜索结果执行任何操作。
编辑:此代码适用于我(使用结果打印成功的JSON响应)
PropertySearch_Post