2017-09-24 15 views
1

私はPythonで遊んでいますが、私はスクリプトが与えられたときに自動的にパラメータとパラメータの値を特定するようにしたいと思いますか?Python pycurlリストの分離

import os 
import pycurl, re, cStringIO 
from urllib import urlencode 
import Queue 
import threading 
import sys 
import socket 
import io 

def curl(host,option,params): 

try: 

    if option == "GET": 

     buf = cStringIO.StringIO() 

     c = pycurl.Curl() 

     c.setopt(c.URL, host) 
     c.setopt(c.WRITEFUNCTION, buf.write) 
     c.setopt(pycurl.SSL_VERIFYPEER, 0) 
     c.setopt(pycurl.SSL_VERIFYHOST, 0) 
     c.setopt(c.USERAGENT, 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36') 
     c.setopt(pycurl.NOSIGNAL, 1) 
     c.perform() 
     html = buf.getvalue() 

     print html 

    elif option == "POST": 

     buf = cStringIO.StringIO() 

     c = pycurl.Curl() 

     c.setopt(c.URL, host) 

     x = params.split(":")[0] 
     y = params.split(":")[1] 
     post_data = {x:y} 
     postfields = urlencode(post_data) 
     c.setopt(c.POSTFIELDS, postfields)   
     c.setopt(c.WRITEFUNCTION, buf.write) 
     c.setopt(pycurl.SSL_VERIFYPEER, 0) 
     c.setopt(pycurl.SSL_VERIFYHOST, 0) 
     c.setopt(c.USERAGENT, 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36') 
     c.setopt(pycurl.NOSIGNAL, 1) 
     c.perform() 
     html = buf.getvalue() 

     print html 

except pycurl.error,e: 

     print e 

curl('localhost/b.php','POST','par1:val1|par2:val2|par3:val3') 

これまでのところ、私は手動で行うことができますが、コードを毎回編集して、各パラメータに対してこれらの分割機能を追加するのは面倒です。

のpython p.py アレイ ( [PAR1:これは

[par1] => val1 
[par2] => val2 
[par3] => val3 

私の実際の結果を?:ように私は、これを自動的にパラメータと値を投稿するためのコードを作成するにはどうすればよい

] => val1 | par2 )

答えて

0

私には、以下のようなワーカー関数を抽出する必要があるようです curl

def run_curl(host): 
    """Run curl on provided parameters""" 
    buf = cStringIO.StringIO() 
    c.setopt(c.URL, host) 
    c.setopt(c.WRITEFUNCTION, buf.write) 
    c.setopt(pycurl.SSL_VERIFYPEER, 0) 
    c.setopt(pycurl.SSL_VERIFYHOST, 0) 
    c.setopt(c.USERAGENT, 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36') 
    c.setopt(pycurl.NOSIGNAL, 1) 
    try: 
     c.perform() 
    except pycurl.error: 
     raise 
    return buf 

if option == "GET":あなたは本当にinyourセットアップを取り除くことはできませんが、労働者の機能を抽出し、その内のコードの一部は、非常に小さくすることができます。

また、この作業ではrequestsが良い選択と思われます。

+0

こんにちは、私はカール関数を作りたかったので、OPTIONがPOSTまたはGETになるとGETを見ず、POSTを見て、書き込むパラメータが正しく動作していない、私が欲しいのはPOSTが呼び出されたときにこれらのパラメーターのすべてのパラメーターと値を自動的に検出するスクリプト。 – pythn

+0

実際の問題に関連していないので、質問からGETの部分を取り除こうとしないのはなぜですか?パラメータの部分はあなたが探しているkwargsですか? –