تسجيل الثعبان إلى منتدى
سؤال
ولقد كتبت هذا في محاولة لتسجيل الدخول إلى المنتدى (PHPBB3).
import urllib2, re
import urllib, re
logindata = urllib.urlencode({'username': 'x', 'password': 'y'})
page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata])
output = page.read()
ولكن عند تشغيل انها تأتي مع؛
Traceback (most recent call last):
File "C:/Users/Mike/Documents/python/test urllib2", line 4, in <module>
page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata])
TypeError: string indices must be integers
وأي أفكار لكيفية حل هذا؟
تحرير م>
وإضافة الفاصلة بين سلسلة والبيانات يعطي هذا الخطأ بدلا
Traceback (most recent call last):
File "C:/Users/Mike/Documents/python/test urllib2", line 4, in <module>
page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login",[logindata])
File "C:\Python25\lib\urllib.py", line 84, in urlopen
return opener.open(url, data)
File "C:\Python25\lib\urllib.py", line 192, in open
return getattr(self, name)(url, data)
File "C:\Python25\lib\urllib.py", line 327, in open_http
h.send(data)
File "C:\Python25\lib\httplib.py", line 711, in send
self.sock.sendall(str)
File "<string>", line 1, in sendall
TypeError: sendall() argument 1 must be string or read-only buffer, not list
edit2 م>
ولقد غيرت رمز من ما كان عليه ل؛
import urllib2, re
import urllib, re
logindata = urllib.urlencode({'username': 'x', 'password': 'y'})
page = urllib2.urlopen("http://www.woarl.com/board/ucp.php?mode=login", logindata)
output = page.read()
وهذا لا رمي أي رسائل خطأ، انها مجرد يعطي 3 أسطر فارغة. هل هذا لأنني أحاول أن أقرأ من سجل في الصفحة التي يختفي بعد تسجيل الدخول. إذا كان الأمر كذلك كيف يمكنني الحصول عليه لعرض فهرس وهو ما يجب أن تظهر بعد ضرب سجل في.
المحلول
وخطك
page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login"[logindata])
وهو غويا بيثون صالح. يفترض أن يعني لك
page = urllib.urlopen("http://www.woarl.com/board/ucp.php?mode=login", [logindata])
والتي لديها فاصلة تفصل بين الحجج. ومع ذلك، ما تريد في الواقع هو مجرد
page = urllib2.urlopen("http://www.woarl.com/board/ucp.php?mode=login", logindata)
ودون أن يحاول أن أرفق logindata في قائمة واستخدام إصدار urlopen أكثر ما يصل إلى تاريخ غير المكتبة urllib2.
نصائح أخرى
وماذا عن باستخدام فاصلة بين سلسلة، "http:..."
والبيانات urlencoded، [logindata]
؟
وينبغي أن لا يكون لديك سلسلة URL
"http://www.woarl.com/board/ucp.php?mode=login"[logindata]
ولكن
"http://www.woarl.com/board/ucp.php?mode=login", logindata
وأعتقد، لأن [] هو لمجموعة وتتطلب عددا صحيحا. قد أكون على خطأ والسبب أنني لم تكن قد فعلت الكثير من بيثون.
إذا كنت تفعل نوع على logindata، يمكنك أن ترى أن ذلك هو سلسلة:
>>> import urllib
>>> logindata = urllib.urlencode({'username': 'x', 'password': 'y'})
>>> type(logindata)
<type 'str'>
وضعه بين قوسين ([]) يضعه في سياق القائمة، وهي ليست على ما تريد.
وهذا من شأنه أن يكون أسهل مع رفيع المستوى "مكننة" وحدة.