|
|
导航: |
论坛 -> Web应用开发
斑竹:bodies |
|
作者: |
|
2023/9/6 9:05:04 |
标题: |
THTTPClient 用post发送失败 |
浏览:672 |
|
加入我的收藏 |
楼主: |
idhttp.Post(url,data,jsontoget,nil,heads);这样调用可以成功,能读到返回的数据
idhttp.Post(url,data,jsontoget)用这个,提示“Project Project1.exe raised exception dass ENetHTTPClientException with message Error sending data: (87)参数错误。” 代码如下,打了*的做了脱敏处理。 var url,str:string; JsonToSend,jsontoget: TStringStream; data:Tstrings; LHeaders: array of TNameValuePair; IdHttp :THTTPClient; begin url:='http://*******/getPsnByCondition'; IdHttp:=THTTPClient.Create; idhttp.Accept:='application/json,text/plain,*/*'; idhttp.AcceptCharSet:='utf-8' ; idhttp.AcceptEncoding:='gzip,deflate'; idhttp.AcceptLanguage:='zh-CN,zh;q=0.9'; idhttp.ContentType:='application/x-www-form-urlencoded; charset=UTF-8'; idhttp.UserAgent:='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' +'Chrome/114.0.0.0 Safari/537.36'; idhttp.CustomHeaders['Cookie'] :='XSRF-TOKEN='+edt2.Text+';SESSION='+edt1.Text; idhttp.CustomHeaders['X-XSRF-TOKEN'] :=edt2.Text; idhttp.CustomHeaders['Host'] :='******'; idhttp.CustomHeaders['Connection']:='keep-alive'; idhttp.CustomHeaders['Content-Length:']:='177'; idhttp.CustomHeaders['Origin'] :='*****'; idhttp.CustomHeaders['Referer'] :='http://******/N1412.html';
data:=tstringlist.Create; data.Clear; data.Add('psnCertType=01'); data.Add('certno=******'); data.Add('searchInsuEmp=true'); data.Add('menuQuryPerm=4'); data.Add('_modulePartId_='); data.Add('fron_tUrl=http://********/N1412.html#/N141201');
SetLength(heads, 8); heads[0] := TNameValuePair.Create('Cookie', 'XSRF-TOKEN='+edt2.Text+';SE SSION='+edt1.Text); heads[1] := TNameValuePair.Create('X-XSRF-TOKEN', edt2.Text); heads[2] := TNameValuePair.Create('Host','*****'); heads[3] := TNameValuePair.Create('Connection','keep-alive'); heads[4] := TNameValuePair.Create('Content-Length','177'); heads[5] := TNameValuePair.Create('Origin','*****'); heads[6] := TNameValuePair.Create('Referer','******/mbs/ui/N1412.html'); heads[7] := TNameValuePair.Create('Accept-Encoding','gzip,deflate');
jsontoget:= TStringStream.Create('',TEncoding.UTF8); jsontoget.Position:=0;
----------------------------------------------
- |
作者: |
|
2023/9/6 9:35:47 |
1楼: |
证明了程序员过于自作聪明!!
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
|
作者: |
|
2023/9/6 9:38:07 |
2楼: |
所有程序员都应该认真学什么叫: 黑盒测试.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
|
作者: |
|
2023/9/6 9:53:54 |
3楼: |
你直接去问AI 要示例吧。
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
|
作者: |
|
2023/9/6 10:06:57 |
4楼: |
@tuesdays (Tuesday) 我不是程序员。。。。,黑盒测试啥意识 @letianwuji (大器晚成) ai 没有提示。之前用python写,很方便。这几天试试Delphi能不能爬数据。太麻烦了。
----------------------------------------------
-
|
作者: |
|
2023/9/7 15:12:13 |
5楼: |
你太能玩了,用D来爬数据,放着PY这么多库不用,这么多例子不参考,
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
|
作者: |
|
2023/9/8 8:49:52 |
6楼: |
@supermay (supermay) python的我写出来了,试着转成Delphi的。。。。。就是闲的。。。。
这个问题我在stackoverflow上问了,一个大佬回复说这可能是一个bug,不知道他是不是认真的。
此帖子包含附件:
 大小:63.4K |
----------------------------------------------
-
|
作者: |
|
2023/9/8 18:14:19 |
7楼: |
把你代码输入Ai,返回如下: delphi var url: string; data: TStringList; headers: array of TNameValuePair; IdHttp: THTTPClient; begin url := 'http://*******/getPsnByCondition'; IdHttp := THTTPClient.Create;
// 设置请求头 SetLength(headers, 8); headers[0] := TNameValuePair.Create('Accept', 'application/json,text/plain,*/*'); headers[1] := TNameValuePair.Create('Accept-Charset', 'utf-8'); headers[2] := TNameValuePair.Create('Accept-Encoding', 'gzip,deflate'); headers[3] := TNameValuePair.Create('Accept-Language', 'zh-CN,zh;q=0.9'); headers[4] := TNameValuePair.Create('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); headers[5] := TNameValuePair.Create('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'); headers[6] := TNameValuePair.Create('Cookie', 'XSRF-TOKEN=' + edt2.Text + ';SESSION=' + edt1.Text); headers[7] := TNameValuePair.Create('X-XSRF-TOKEN', edt2.Text);
// 添加其他自定义请求头 // ... // 发送POST请求 data := TStringList.Create; try data.Add('psnCertType=01'); data.Add('certno=******'); data.Add('searchInsuEmp=true'); data.Add('menuQuryPerm=4'); data.Add('_modulePartId_='); data.Add('fron__tUrl=http://********/N1412.html#/N141201');
try IdHttp.Post(url, data, nil, headers); // 处理服务器的响应 except on E: Exception do begin // 发生错误时的处理 ShowMessage('Error: ' + E.Message); end; end; finally data.Free; IdHttp.Free; end; end;
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
|
作者: |
|
2023/9/9 8:42:45 |
8楼: |
@letianwuji (大器晚成) 1、用headers[n]这个方式设置自定义头可以读到数据。 2、用idhttp.CustomHeaders['****']:=****.....idhttp.Post(url,data,jsontoget)这个方式读不到。 各变量,包括header,发送的数据,单步跟踪,与用IdHttp.Post(url, data, nil, headers);都一样。但在unit System.Net.HttpClient单元 procedure THTTPClient.ExecuteHTTPInternal(const ARequest: IHTTPRequest; const AContentStream: TStream; const AResponse: IHTTPResponse); ... LExecResult := DoExecuteRequest(LRequest, LResponse, AContentStream); //执行到这里就出错 那个大佬说是bug
----------------------------------------------
-
|
作者: |
|
2023/9/10 16:51:18 |
9楼: |
idhttp.CustomHeaders['Content-Length:']:='177'; 这里出错了。把这里注释掉,可以得到数据。我了个去。。。。。
----------------------------------------------
-
|
作者: |
|
2023/9/10 16:51:53 |
10楼: |
盒子不能散分的。。。。谢谢各位
----------------------------------------------
-
|
|