我正在玩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 )
答案 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似乎是个不错的选择。