2012-05-14 17 views
1

私はBayImgに画像をアップロードできるスクリプトを書こうとしていますが、正しく動作するようには思えません。私が知る限り、結果は得られません。私はそれがデータや何を提出していないのか分かりませんが、私がレスポンスを印刷すると、写真をアップロードするときに得たページではなくホームページのURLが得られます。私がPython 2.xを使っていたら、Mechanizeを使うでしょう。しかし、Py3kでは利用できませんので、urllibを使用しようとしています。私はPython 3.2.3を使用しています。コードは次のとおりです。Python 3でPOSTリクエストを受け取ることができません

#!/usr/bin/python3 

    from urllib.parse import urlencode 
    from urllib.request import Request, urlopen 

    image = "/test.png" 
    removal = "remove" 
    tags = "python script test image" 
    url = "http://bayimg.com/" 
    values = {"code" : removal, 
       "tags" : tags, 
       "file" : image} 

    data = urlencode(values).encode("utf-8") 
    req = Request(url, data) 
    response = urlopen(req) 
    the_page = response.read() 

ご協力いただければ幸いです。 http://upload.bayimg.com/upload

  • あなたはファイルの内容を読み込む代わりにファイル名のみを渡す必要があります:あなたはこのような場合には、htmlソースを確認し、右のURLを知っている必要があり、データ
  • POSTする必要が

  • 答えて

    3

    Requestsを使用すると簡単に行うことができます。

    +1

    使用済みのリクエストは推奨されています。ありがとう、トン! – LANshark

    1

    私はこの投稿に出会い、以下の解決策で改善すると考えました。ここでは、urllibを使って実装されたPOSTメソッドを持つPython3で書かれたサンプルクラスを示します。

    import urllib.request 
    import json 
    
    from urllib.parse import urljoin 
    from urllib.error import URLError 
    from urllib.error import HTTPError 
    
    class SampleLogin(): 
    
        def __init__(self, environment, username, password): 
         self.environment = environment 
         # Sample environment value can be: http://example.com 
         self.username = username 
         self.password = password 
    
        def login(self): 
         sessionUrl = urljoin(self.environment,'/path/to/resource/you/post/to') 
         reqBody = {'username' : self.username, 'password' : self.password} 
         # If you need encoding into JSON, as per http://stackoverflow.com/questions/25491541/python3-json-post-request-without-requests-library 
         data = json.dumps(reqBody).encode('utf-8') 
    
         headers = {} 
         # Input all the needed headers below 
         headers['User-Agent'] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36" 
         headers['Accept'] = "application/json" 
         headers['Content-type'] = "application/json" 
    
         req = urllib.request.Request(sessionUrl, data, headers) 
    
         try: 
          response = urllib.request.urlopen(req) 
          return response 
         # Then handle exceptions as you like. 
         except HTTPError as httperror: 
          return httperror 
         except URLError as urlerror: 
          return urlerror 
         except: 
          logging.error('Login Error') 
    
    関連する問題