TypeError:pycurl python flask API开发中setopt的无效参数

时间:2019-01-19 15:10:50

标签: python python-requests flask-restful pycurl

我正在尝试使用python flask构建Web服务API。当我在下面执行此代码时:

http://localhost/Service/API/Services.svc/XMLService/Students?SEARCHBY=StudentNo&STUDENTNUMBER='1234'&SESSIONKEY=94194202323

...工作正常。但是我无法将STUDENTNUMBER传递给此函数。

我尝试了两种方法:

  1. Concat构建一个字符串并将其传递给c.setopt(c.URL,)此函数

    a。方式1
    b。方式2
    C。方式3

通过那些方式,我会遇到相同的错误:

  

TypeError:setopt的无效参数

  1. 使用c.setopt(c.POSTFIELDS,post_data)传递变量

    a。方式4

    这样我得到了相同的错误:

      

    不允许使用方法。请参阅,以构建对服务的有效请求

    这样我将转到此链接:

    b。方式5

    这样我会遇到相同的错误

      

    TypeError:setopt的无效参数

方法1:

student_url = " http://localhost/Service/API/Services.svc/XMLService/Students?SEARCHBY=StudentNo&STUDENTNUMBER=%s&SESSIONKEY=94194202323"%student_number;
 c.setopt(c.URL,student_url)

方法2:

c.setopt(c.URL,"http://localhost/Service/API/Services.svc/XMLService/Students?SEARCHBY=StudentNo&STUDENTNUMBER=%s&SESSIONKEY=94194202323"%(student_number))

方法3:

c.setopt(c.URL,"http://localhost/Service/API/Services.svc/XMLService/Students?SEARCHBY=StudentNo&STUDENTNUMBER=%s&SESSIONKEY=94194202323"%student_number)

方法4:

c.setopt(c.URL,"http://localhost/Service/API/Services.svc/XMLService/Students?SEARCHBY=StudentNo&STUDENTNUMBER=%s&SESSIONKEY=94194202323")
c.setopt(c.POSTFIELDS, 'STUDENTNUMBER = 1234')

方法5:

post_data ={'STUDENTNUMBER' : '1234'}
c.setopt(c.URL,"http://localhost/Service/API/Services.svc/XMLService/Students?SEARCHBY=StudentNo&SESSIONKEY=94194202323")
c.setopt(c.POSTFIELDS, post_data)
c.setopt(pycurl.POST, 1)

我该如何做?

1 个答案:

答案 0 :(得分:0)

这似乎不是关于Flask的问题。看来您正在尝试编写一些代码来查询API(可能是Flask提供的)。

我建议为此使用Python requests库,因为您随后可以将参数定义为字典,这更容易。 不要与Flask.request混淆,这完全是另一回事!

import requests
url = 'http://localhost/Service/API/Services.svc/XMLService/Students'
params = {'SEARCHBY': 'StudentNo', 
          'STUDENTNUMBER': '1234',
          'SESSIONKEY': 94194202323}
r = requests.get(url, params)

上面的最后一行发送了请求,您可以看到带有以下内容的完整URL:

>>> print (r.url)
http://localhost/Service/API/Services.svc/XMLService/Students?SEARCHBY=StudentNo&STUDENTNUMBER=1234&SESSIONKEY=94194202323

或打印响应代码,在我的情况下为404:

>>> print(r)
<Response [404]>

如果响应中包含数据,则可以通过r.text进行访问:

>>> print (r.text)
I am the 404's response body.