отправка https 3 https очень медленно - PullRequest
1 голос
/ 09 января 2011

У меня есть скрипт, который входит через https, используя python 3 и FancyURLopener.Итак, я делаю это:

from urllib.request import FancyURLopener, urlopen
from urllib.parse import urlencode
import re, sys

class SMS:

    login_url = "url1"
    login_act = "url2"
    comp_url = "url3"
    comp_act = "url4"
    LEN = 100

    def __init__(self, phone_num, password):
        self.phone_num = phone_num
        self.password = password
        self.opener = FancyURLopener()
        resp = self.opener.open(SMS.login_url)
        cookie = ""
        for x, y in resp.headers.items():
            if x == "Set-Cookie":
                cookie += y + "; "
        cookie = cookie[:-2]            
        self.opener.addheader("Cookie", cookie)
        print("--login")
        self.login()

    def login(self):
        di = { "action":"", "refid":"", "continuation":"",\
"username":self.phone_num, "password":self.password, "image.x":"45", "image.y":"18"}
        resp = self.opener.open(SMS.login_act, urlencode(di))

    def send(self, to, message):
        print("--sending")
        if len(message) > 100:
            print("Message length too long; Not send.")
            return -1
        resp = self.opener.open(SMS.comp_url).read().decode("windows-1251")
        pattern1 = "<input type=\"hidden\" name=\"daycreditsmsleft\" value=\"(\d+)\""
        pattern2 = "<input type=\"HIDDEN\" name=\"smssenttime\" value=\"(\d+)\""
        post = {"brand":"", "daycreditsmsleft":re.search(pattern1, resp).groups()[0],\
"process":"true", "btnSendSMS.x":"75", "btnSendSMS.y":"23", "model":"0",\
"smssenttime":re.search(pattern2, resp).groups()[0], "remainingChars": str(SMS.LEN - len(message)),\
"reply2inbox":"false", "selReceiverName":"", "txtareaMessage":message, "receiverPhoneNum":to}
        if post["daycreditsmsleft"] == 0:
            print("No more messages; Not send")
            return -1
        resp = self.opener.open(SMS.comp_act, urlencode(post) )

Затем я буду использовать это так:

s = SMS("telephone_num", "pass")
s.send(tel, message)

Проблема в том, что запрос POST слишком медленный.Для входа в систему требуется более 20 секунд. Во всем сценарии есть 2 запроса POST, поэтому он фактически выполняется около минуты.Как это оптимизировать?

Я также заметил, что сообщения принимаются до завершения программы.

1 Ответ

1 голос
/ 09 января 2011

Я предполагаю, что в запросах есть что-то немного отличное, что заставляет ваш сервер очень долго обрабатывать запрос.

Если вы являетесь автором сервера, это должно быть легкопроверить.Если нет, то вам, вероятно, придется использовать какую-то программу трассировки, чтобы вы могли видеть, когда запрос выполняется со стороны Python, и видеть, когда ответ возвращается, и сравнивать его с запросом из вашего браузера.

...