Python pycurl列表分离

时间:2017-09-24 09:29:55

标签: python python-2.7 list split pycurl

我正在玩Python,我想知道如何让脚本在给出时自动识别参数和参数值?

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')

到目前为止,我可以手动完成,但每次编辑代码都很无聊,并为每个参数添加这些分割函数。

如何使代码自动发布参数和值,如下所示?:

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

我的实际结果:

python p.py 排列 (     [par1] => VAL1 | PAR2 )

1 个答案:

答案 0 :(得分:0)

对我来说,似乎你需要提取下面的工人功能 重用您的代码来调用/** * * @Assert\Callback() */ public function validatePhone(ExecutionContextInterface $context) { if (/* Fields are not empty */) { $context->getValidator()->validate($this->phone); } }

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 你无法真正摆脱你的设置,但你可以通过提取一个工作函数使其中的代码部分更小。

同样对于这项任务requests似乎是个不错的选择。