DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: covid_007
今日帖子: 7
在线用户: 13
导航: 论坛 -> Web应用开发 斑竹:bodies  
作者:
男 slan06 (slan) ▲▲△△△ -
普通会员
2023/9/6 9:05:04
标题:
THTTPClient 用post发送失败 浏览:1206
加入我的收藏
楼主: 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;

----------------------------------------------
-
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2023/9/6 9:35:47
1楼: 证明了程序员过于自作聪明!!
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2023/9/6 9:38:07
2楼: 所有程序员都应该认真学什么叫: 黑盒测试.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 letianwuji (大器晚成) ▲▲▲▲▲ -
普通会员
2023/9/6 9:53:54
3楼: 你直接去问AI 要示例吧。
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
男 slan06 (slan) ▲▲△△△ -
普通会员
2023/9/6 10:06:57
4楼: @tuesdays (Tuesday)
我不是程序员。。。。,黑盒测试啥意识
@letianwuji (大器晚成)
ai 没有提示。之前用python写,很方便。这几天试试Delphi能不能爬数据。太麻烦了。
----------------------------------------------
-
作者:
男 supermay (supermay) ★☆☆☆☆ -
盒子活跃会员
2023/9/7 15:12:13
5楼: 你太能玩了,用D来爬数据,放着PY这么多库不用,这么多例子不参考,
----------------------------------------------
链接:https://pan.baidu.com/s/12jzmECYKhGCsHBxz8tmB6w 提取码:pelr --来自百度网盘超级会员V9的分享
作者:
男 slan06 (slan) ▲▲△△△ -
普通会员
2023/9/8 8:49:52
6楼: @supermay (supermay)
python的我写出来了,试着转成Delphi的。。。。。就是闲的。。。。

这个问题我在stackoverflow上问了,一个大佬回复说这可能是一个bug,不知道他是不是认真的。
此帖子包含附件:
PNG 图像
大小:63.4K
----------------------------------------------
-
作者:
男 letianwuji (大器晚成) ▲▲▲▲▲ -
普通会员
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;
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
男 slan06 (slan) ▲▲△△△ -
普通会员
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
----------------------------------------------
-
作者:
男 slan06 (slan) ▲▲△△△ -
普通会员
2023/9/10 16:51:18
9楼: idhttp.CustomHeaders['Content-Length:']:='177';
这里出错了。把这里注释掉,可以得到数据。我了个去。。。。。
----------------------------------------------
-
作者:
男 slan06 (slan) ▲▲△△△ -
普通会员
2023/9/10 16:51:53
10楼: 盒子不能散分的。。。。谢谢各位
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行58.59375毫秒 RSS