【问题标题】:pycurl PostFields option usagepycurl PostFields 选项用法
【发布时间】:2011-02-18 19:15:28
【问题描述】:

我正在尝试使用 pycurl 将文件上传到 Processmaker。 app、self.usr 和 doc 是字符串。 file 是一个 django 文件字段对象。我目前只是传递对象。我很确定我只是将不正确的对象/类型/事物传递给 ATTACH_FILE 字段。

有效的 php POSTFIELDS 定义如下所示:

$params = array (
'ATTACH_FILE'  => '@/home/test.txt',
'APPLICATION'  => $resultCase->caseId,
'INDEX'        => 1,
'USR_UID'      => $oRandomUser->guid,
'DOC_UID'      => '3154812864d55a6e017ff65089604572',
'APP_DOC_TYPE' => 'INPUT',
'TITLE'        => "Initial document".date("Y-m-d H:i:s"),
'COMMENT'      => "this document was uploaded by the system"

curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

还有目前坏掉的蟒蛇:

    c = pycurl.Curl()
    data = [
            ('ATTACH_FILE', (pycurl.READFUNCTION, file.read)),
            ('APPLICATION', app),  
            ('INDEX' , 1),
            ('USR_UID', self.usr),
            ('DOC_UID', doc),
            ('APP_DOC_TYPE', 'INPUT')
           ]

    post = urllib.urlencode(data)

    print post

    url = "http://192.168.51.155/sysworkflow/en/green/services/upload"

    c.setopt(pycurl.URL, url)
    c.setopt(pycurl.VERBOSE, 1)
    c.setopt(pycurl.POST, 1)
    c.setopt(pycurl.POSTFIELDS, post)

    c.perform()

    c.close()

有什么想法吗?

【问题讨论】:

    标签: php django curl pycurl


    【解决方案1】:

    我找到了解决我自己问题的方法。这是我所做的,使用位于此处的海报:http://atlee.ca/software/poster/ 我做了以下事情:

    from poster.streaminghttp import register_openers
    import poster
    
    register_openers()
    
    url = "http://192.168.51.155/sysworkflow/en/green/services/upload"
    
    params = { 
    'APPLICATION' : app,  
    'INDEX' : 1,
    'USR_UID' : self.usr,
    'DOC_UID' : doc,
    'APP_DOC_TYPE' : 'INPUT',
    'TITLE' : 'Test',
    'ATTACH_FILE' : open(file.path, "rb")
    }
    
    datagen, headers = poster.encode.multipart_encode(params)
    request = urllib2.Request(url, datagen, headers)
    result = urllib2.urlopen(request)
    print result.read()
    

    比 pycurl 更容易使用!我第一次尝试的问题是 POSTFIELDS 不能接受文件(没有一些争论),使用 HTTPPOST 选项可以处理文件,但很难同时处理文件数据和字段数据。

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      • 2020-11-10
      相关资源
      最近更新 更多