作者: wood_0220 時間: 2021-8-9 14:10 標題: 有無高手師兄可以幫忙 : Max retries exceeded with url
大家好, 最近用寫左個bot, 宜家有d connection issue 問題想問下高手, 坊間真係搵唔到答案:
以下係我個bot 的code:
- def papa_BT_scan(context: telegram.ext.CallbackContext):
- ws_nonFG_bot_web_scraping.papa_bt_scan(context)
- #Server Start
- #===========================================================
- def server_start(update: telegram.Update, context: telegram.ext.CallbackContext):
- print("Telegram_bot_nonFG Started.")
- context.bot.send_message(chat_id=update.message.chat_id,text=':)')
- context.job_queue.run_daily(papa_BT_scan,datetime.time(hour=18, minute=00, tzinfo=pytz.timezone('Asia/Hong_Kong')),context=update.message.chat_id)
-
- if __name__ == "__main__":
- REQUEST_KWARGS = {'proxy_url': 'socks5h://127.0.0.1:9150' }
- u = Updater('<myToken>', use_context=True,request_kwargs=REQUEST_KWARGS)
-
- start_handler = CommandHandler('s', server_start,pass_job_queue=True)
- u.dispatcher.add_handler(start_handler)
-
- u.job_queue.start()
- u.start_polling()
- u.idle()
Error while getting Updates: urllib3 HTTPError SOCKSHTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot1924749319:<mytoken>/getUpdates (Caused by ConnectTimeoutError(<telegram.vendor.ptb_urllib3.urllib3.contrib.socks.SOCKSHTTPSConnection object at 0x116208c90>, 'Connection to api.telegram.org timed out. (connect timeout=5.0)'))
No error handlers are registered, logging exception.
Traceback (most recent call last):
File "/Library/anaconda3/lib/python3.7/site-packages/socks.py", line 809, in connect
negotiate(self, dest_addr, dest_port)
File "/Library/anaconda3/lib/python3.7/site-packages/socks.py", line 444, in _negotiate_SOCKS5
self, CONNECT, dest_addr)
File "/Library/anaconda3/lib/python3.7/site-packages/socks.py", line 524, in _SOCKS5_request
resp = self._readall(reader, 3)
File "/Library/anaconda3/lib/python3.7/site-packages/socks.py", line 276, in _readall
d = file.read(count - len(data))
File "/Library/anaconda3/lib/python3.7/socket.py", line 589, in readinto
return self._sock.recv_into(b)
socket.timeout: timed out
During handling of the above exception, another exception occurred:
我上網睇過好多同類問題都好似無答案, 暫時試過用Proxy Server / VPN(ExpressVPN) , 但問題依然存在.
好想希望各位高手巴打可以幫幫我
作者: Yucie 時間: 2021-8-9 17:05
你係唔係部PC 行緊好多PROGRAM 不斷抓WEBSITE, 整到個SOCKET 壞壞地, 或者你不斷CONNECT 時間太密個SERVER BAN 你.
1. 試搵一部剩機只行呢個PROGRAM (最好用WIN 7 試, 用WMWARE 裝來試都得)
2. 如果係因為CONNECT 過密被BAN 一段時間, 用SLEEP 減少CONNECT 次數
作者: wood_0220 時間: 2021-8-9 17:18
確實係部機係專用黎web scraping, 但其實個密度都係講度1日有20個web scraping request(不同網站,不是唯一網址).
1. 我部機係Mac Mini Server, 如果突然轉到win 7 , 好似有d囷難...
2. 其實如果我係CODE 入面加d sleep 等selenium 減d GET url, 會唔會對件事有幫助?
作者: wood_0220 時間: 2021-8-9 18:55
我想問多句,一個environment 入面,可唔可以同時間開兩個或以上的telegram bot 在terminal 上運行?
作者: Yucie 時間: 2021-8-9 20:25
確實係部機係專用黎web scraping, 但其實個密度都係講度1日有20個web scraping request(不同網站,不是唯 ...
wood_0220 發表於 2021-8-9 17:18
我窮人無MAC 實體機, 頂多用WMWARE 裝過MAC OS.
MAC 機增加CONNECTION 方法
你可以試試用呢個方法增加CONNECTION. 我MAC 機唔多熟, 睇下有無其他師兄幫到你
或者你可以一個做個LOOP 先完成一個SITE 再抓下一個SITE DATA.
其實你搵selenium抓website data 既話, 一張圖/一個object 就一個connection, 如果你同一時間爆幾個site. connection 就自然滿載. 我唔知你熟唔熟分析website, 好似你之前問果個car 28 site問題, 你直接用python 既httplib2 library 抓data, 就只抓頁面發生一個connection. 如果你用selenium 抓data 就發生n 個connection. 所以最快最直接就先分析完個site 再進行抓data. 如果無辨法之下, 我先用selenium 抓data.
作者: wood_0220 時間: 2021-8-9 23:10
明白你的意思了,thanks. 謝謝寶貴的意見
作者: super_hkg 時間: 2021-8-9 23:24
u.start_polling()
https://python-telegram-bot.read ... am.ext.updater.html
poll_interval default 係0秒,秒秒poll 蛇都死
試下
u.start_polling(poll_interval=10)
如果爭多D 都冇乜問題,可以再set 大d
作者: wood_0220 時間: 2021-8-11 09:08
本帖最後由 wood_0220 於 2021-8-11 09:12 編輯
u.start_polling()
poll_interval default 係0秒,秒秒poll 蛇都死
試下
u.start_polling(poll_interval ...
super_hkg 發表於 2021-8-9 23:24
我試左以下情況:
Test 1: u.start_polling(poll_interval=20) -> Failed with same error
Test 2: u.start_polling(poll_interval=20, timeout=20) -> Failed with same error too...
我真係做到有D想放棄, 試左好多日都係唔work .....
作者: Yucie 時間: 2021-8-11 14:33
我試左以下情況:
Test 1: u.start_polling(poll_interval=20) -> Failed with same error
Test 2: u.star ...
wood_0220 發表於 2021-8-11 09:08
裝個WINSHARK MON 住個TRAFFIC CONNECTION
WINSHARK 下載頁
睇下背景係唔係平時已經一堆CONNECTION
P.S 你有只RUN 過呢個PROGRAM 無事, 有無同其他PROGRAM 炒車
作者: wood_0220 時間: 2021-8-11 16:51
裝個WINSHARK MON 住個TRAFFIC CONNECTION
睇下背景係唔係平時已經一堆CONNECTION
P.S 你有只RUN 過呢 ...
Yucie 發表於 2021-8-11 14:33
Thanks Yucie. 我會進一步試試你的提議方案.
BTW, 我試緊super_hkg 師兄的solution, 但我嘗試加入timeout parameters 而並是非poll_interval, 宜家觀察中, 好似暫時都無有exceptions, 好緊張....
現在使用:
u.start_polling(timeout=600)
作者: 537923 時間: 2021-8-12 03:13
你個socks5h://127.0.0.1:9150係由邊個提供?連去邊?
你個telegram api只係通知用?
你個telegram api一定要行proxy?
你每秒call緊幾多次telegram api?
telegram可以改用webhooks黎收message(要有public ip & port)
我覺得最大可能係你個socks5 proxy server有問題
作者: wood_0220 時間: 2021-8-12 12:26
你個socks5h://127.0.0.1:9150係由邊個提供?連去邊?
你個telegram api只係通知用?
你個telegram api一定要 ...
537923 發表於 2021-8-12 03:13
你個socks5h://127.0.0.1:9150係由邊個提供?連去邊? -> Tor Browser https://www.torproject.org/download/languages/
你個telegram api只係通知用? -> Yes
你個telegram api一定要行proxy? 唔係, 純粹之前佢一直timeout , 用黎POC, 如果可以的話我都唔想用
你每秒call緊幾多次telegram api? -> Daily 每日一次
telegram可以改用webhooks黎收message(要有public ip & port)
作者: 537923 時間: 2021-8-12 13:43
telegram api如果只係send_message, 唔收message可以唔開start_polling
error既原因係tor proxy唔stable, 成日會connect唔到
如果poll_interval 0, timeout 10
6 * 60 *24 = 8640 request /day for polling 經 tor
其中一個connect唔到已經會出error
option 1 (斬腳趾): 唔開start_polling, 只發不收
option 2 (都有機會出事): telegram api唔行tor, 相對穩定
option 3 (最好就): try catch start_polling, error handling, 無限復活
作者: wood_0220 時間: 2021-8-12 14:35
本帖最後由 wood_0220 於 2021-8-12 14:37 編輯
感謝上面師兄的資料,真係對我好有用.
最新更新, 我宜家無用到Tor 再POC緊 (用緊下面的新code)...
宜家係無再出"Max retries exceeded with url"
我尋晚試左係行得晒所有jobs (14:20,16:00,18:00,22:00) , 但到左今日 我發現好似2點個job 無行到.... (但個bot係無事, 一路都仲行緊)
個人感覺: 其實我之前個bot死應該係無落timeout=600 在start_polling() 入面, 雖然唔知咁樣的setting 岩唔岩, 宜家雖然無事, 但又唔知點解job queue 入面的job 到左第二日自己又唔識行...
其實係唔係仲要SET埋poll_interval?- from telegram.ext import Updater, CommandHandler
- import logging, datetime, pytz
- import ws_nonFG_bot_web_scraping
- logging.basicConfig(level=logging.INFO,
- format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- logger = logging.getLogger()
- def start(update, context):
- context.job_queue.run_daily(papa_BT_scan,datetime.time(hour=14, minute=20, tzinfo=pytz.timezone('Asia/Hong_Kong')),days=(0, 1, 2, 3, 4, 5, 6), context=update.message.chat_id)
- context.job_queue.run_daily(papa_BT_scan,datetime.time(hour=16, minute=00, tzinfo=pytz.timezone('Asia/Hong_Kong')),days=(0, 1, 2, 3, 4, 5, 6), context=update.message.chat_id)
- context.job_queue.run_daily(papa_BT_scan,datetime.time(hour=18, minute=00, tzinfo=pytz.timezone('Asia/Hong_Kong')),days=(0, 1, 2, 3, 4, 5, 6), context=update.message.chat_id)
- context.job_queue.run_daily(papa_BT_scan,datetime.time(hour=22, minute=00, tzinfo=pytz.timezone('Asia/Hong_Kong')),days=(0, 1, 2, 3, 4, 5, 6), context=update.message.chat_id)
-
-
- def msg(context):
- context.bot.send_message(chat_id=context.job.context, text='text')
- def error(update, context):
- """Log Errors caused by Updates."""
- logger.warning('Update "%s" caused error "%s"', update, context.error)
- def papa_BT_scan(context):
- ws_nonFG_bot_web_scraping.papa_bt_scan(context)
- def main():
- updater = Updater( '<Token>' , use_context=True)
- dp = updater.dispatcher
- dp.add_handler(CommandHandler("s", start, pass_job_queue=True))
- dp.add_error_handler(error)
- listjob = dp.job_queue.jobs()
- print(listjob)
- updater.start_polling(timeout=600)
- updater.idle()
- if __name__ == '__main__':
- main()
作者: super_hkg 時間: 2021-8-12 17:08
最懶的方法:
- from time import sleep
- if __name__ == '__main__':
- While True:
- try:
- main()
- except:
- sleep(10)
- pass
同埋urlib3 並唔係完美,如果connection 果part 係自己寫既,一定要落try except,如果只係telegram api問題,我之前係用telepot ,算係好穩定
作者: wood_0220 時間: 2021-8-12 17:18
最懶的方法:其實如果可以睇埋 #1 "During handling of the above exception, another exception occurred:" ...
super_hkg 發表於 2021-8-12 17:08
其實宜家已經好似solve 到#1 error 的問題 (當加左timeout=600 在start_polling之後)
宜家問題變左係今日set 完在job queue 的job, 去到聽日的時候自己就唔識trigger 黎行....
唔知係唔係我d parameters 的問題... (詳情就係#14 的code)
萬分感謝你呀super_hkg
作者: super_hkg 時間: 2021-8-12 17:57
其實宜家已經好似solve 到#1 error 的問題 (當加左timeout=600 在start_polling之後)
宜家問題變左係今日 ...
wood_0220 發表於 2021-8-12 17:18
https://medium.com/analytics-vid ... -tasks-932edd61c534
def morning(context: CallbackContext):
???
照入面做應該得,我冇試過唔肯定

