2017-06-15 179 views
-2

我想送岗位要求的循环在python 这是我的代码如何在python中发送post请求?

import json 
import requests 
url = "http://club.raakdarou.com/users/main/GettingGift" 
number=2237499999970255 
headers={'Host': 'sample.com', 
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0', 
'Accept': '*/*', 
'Accept-Language': 'en-US,en;q=0.5', 
'Accept-Encoding': 'gzip, deflate', 
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
'X-Requested-With': 'XMLHttpRequest', 
'Referer': 'http://sample.com/users/main', 
'Content-Length': '53', 
'Cookie': 'ASP.NET_SessionId=4sirmg5n05fkszmvbasr4vnt; __RequestVerificationToken=AsWNgNzLVjU8kCNvWvTjn_tJiBlEKE5NH_xO-o7eGkq3h3av7I1e0_qu6NO80SNKfiV-c5Ajm6nlrDE7pFcKFkdr6ZHVX9zXAWYZt79c_pw1', 
'Connection': 'keep-alive'} 
    while(number>=2237400000000000): 
     number=number-1 
     data = {'gift': number , 'X-Requested-With' : 'XMLHttpRequest'} 
     r = requests.post(url, data=json.dumps(data), headers=headers) 
     print(number) 

当我运行这段代码,一切正常,但过了一段时间,程序停止(异常发生),但此错误显示:TimeoutError:[WinError 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接的主机未能响应而建立连接失败 ..........

(我使用wifi连接到网络,当我连接到我的wifi,一个主机页面出现,我应该进入我的用户和通过,之后,我的连接是好的,我可以使用网络。) 我该怎么办?

+0

的'requests'模块普遍预计的'data'参数成为'dict'顺便说一句。您无需将其格式化为JSON。 – Kendas

+2

@Kendas依赖于请求库的版本;同样,使用“数据”字典将导致它被编码;如果意图是将字典呈现为JSON,则应该使用“json”关键字参数。 –

+0

@MichaelAaronSafyan很高兴知道。谢谢。 – Kendas

回答

0

我认为你对网站提出太多要求,在每次请求和检查后暂停一段时间。

您可以通过添加暂停: -

import time 
time.sleep(5)  #5 in seconds 
0

看你的循环,你淹没服务器。这是非常多的请求发送。这不是你正在编写的算法,而是DOS攻击。大多数服务器都有保护措施,并且只是阻止你。如果它不是服务器,那么你的热点是罪魁祸首。

要回答你的问题:这个问题可能不是你的终点,你只是触发证券,因为你发送太多的请求

0

考虑您的代码是如何出现在服务器到您要留言...很多请求都是连续发送的,没有来自同一个发送者的延迟,并且具有相似的参数;服务器可能会认为这是滥用和扼杀或禁止请求应该不足为奇。即使服务器没有智能限制和速率限制,很可能反复发出这样的请求可能会耗尽服务器的可用资源(例如,因为您试图“保持活动”这些连接,服务器可能会运行没有可用的套接字)。

要解决这个问题,你需要做三件事情:

  1. 添加限速在你的代码。
  2. 在您的代码中添加错误处理。
  3. 添加指数回退。

限速

总之,采取请求之间的故意中断。例如:

sleep_time_seconds = 3 
while should_send_requests(): 
    send_request() 
    time.sleep(sleep_time_seconds) 

错误处理

请求可能会失败。你的代码应该正确处理它。

def try_send_request(): 
    try: 
    send_request() 
    return True 
    except requests.RequestException as e: 
    # ... 
    return False 

# ... 
sleep_time_seconds = 3 
while should_send_requests(): 
    try_send_request() 
    time.sleep(sleep_time_seconds) 

指数回退

出现错误时,你应该增加的时间请求之间的量:

sleep_time_seconds = 3 
while should_send_requests(): 
    if try_send_request(): 
    sleep_time_seconds = 3 
    elif sleep_time_seconds < max_sleep_time_seconds: 
    sleep_time_seconds *= 2 
    time.sleep(sleep_time_seconds) 
+0

非常感谢你(在代码中添加错误处理)帮助了我 –