Delphi Rest请求返回错误的请求

Delphi Rest请求返回错误的请求,rest,delphi,request,Rest,Delphi,Request,我有一个调用python rest服务的delphi程序 python rest服务看起来像: @app.route('/flagger/api/v1.0/stem', methods=['GET']) def stem_request(): print request.json if not request.json or u'text' not in request.json: bad_request('no "text" field given')

我有一个调用python rest服务的delphi程序

python rest服务看起来像:

@app.route('/flagger/api/v1.0/stem', methods=['GET'])
def stem_request():
    print request.json
    if not request.json or u'text' not in request.json:
        bad_request('no "text" field given')
    text = request.json['text']
    return jsonify(stemmed=stem(text)), 200
当我向该服务发出curl请求时,我得到了答案:

C:\Program Files\Curl>curl -i -H "Content-Type: application/json" -X GET -d "{\"text\":\"hij geeft mij appels\"}" h
    ttp://192.168.99.100:5000/flagger/api/v1.0/stem
    HTTP/1.0 200 OK
    Content-Type: application/json
    Content-Length: 30
    Server: Werkzeug/0.11.3 Python/2.7.10
    Date: Thu, 28 Jan 2016 13:17:36 GMT

    {
      "stemmed": "geeft appel"
    }
在我的delphixe7/Pro程序中,我有一个Restclient、Restrequestrestreponse组件

所有组件都具有contentype=application/json

restrequest.method=rmGet

在Restrequest中,我添加了一个参数:

contenttype=ctapplication_json
kind=pkrequestbody 
name=text 
value=hij geeft mij appels.
请求由以下代码启动:

MemoContent.Lines.Add('Start...');
RESTClient1.BaseURL:='http://192.168.99.100:5000/flagger/api/v1.0/stem';
MemoContent.Lines.Add('Request Params.Name= '+RESTRequest1.Params.Items[0].Name);
  MemoContent.Lines.Add('Request Params.Value= '+RESTRequest1.Params.Items[0].Value);
  RESTRequest1.Execute;
  MemoContent.Lines.Add('Status= '+RESTResponse1.StatusText);
  MemoContent.Lines.Add('Content= '+RESTResponse1.content);
  MemoContent.Lines.Add('FullRequestURI= '+RESTResponse1.FullRequestURI);
  MemoContent.Lines.Add('BaseURL= '+RESTClient1.BaseURL);
  jValue:=RESTResponse1.JSONValue;
  MemoContent.Lines.Add('Response Json= '+jValue.tostring);
  MemoContent.Lines.Add('Statustext= '+RESTResponse1.StatusText);
请求已执行,但我总是得到错误的请求回答:

Start...
Request Params.Name= text
Request Params.Value= dit is een test
Status= HTTP/1.0 400 BAD REQUEST
Content= {
  "error": "bad request"
}
FullRequestURI= http://192.168.99.100:5000/flagger/api/v1.0/stem
BaseURL= http://192.168.99.100:5000/flagger/api/v1.0/stem
Response Json= {"error":"bad request"}
Statustext= HTTP/1.0 400 BAD REQUEST
有人知道这里怎么了吗

我也不能让它与rest调试器一起工作,但它可以与CURL和其他rest客户机一起工作


谢谢。

您希望发送一个JSON文档而不是HTTP参数,因此您可能应该创建一个JSON对象并将其添加到请求正文中。还有潜在的用途:我已经试过了,它给出了相同的问题str:='{“text”:“hijgeeftmijappels”};jobj:=tjsonobject.ParseJSONValue(tencoding.ASCII.GetBytes(str),0)作为tjsonobject;MemoContent.Lines.Add('JSon请求='+jobj.tostring);restrequest1.ClearBody;restrequest1.AddBody(jobj);RESTRequest1.执行;这可能不会引导您找到解决方案,但在GET操作中发送尸体是不受欢迎的。我假设您一直在查看Python“print”语句的输出,该语句将显示服务器端接收到的内容。有人可能会建议您使用Wireshark查看curl与Delphi的操作,但我认为在您必须执行该操作之前,您有很多调试选项。在Delphi西雅图进行了一些测试之后,REST框架似乎没有发送GET主体。当我翻转到POST时,正文被发送到服务器。因此,您可能会在转到POST或将JSON添加为GET请求的参数(即{“text”:“hij geeft mij appels”}(当然都是正确编码的)中发现一些好处。