- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 idHTTP 组件向 Blogger 发帖,但是收到“HTTP/1.0 400 Bad Request”错误。
procedure TForm1.Button1Click(Sender: TObject);
var request,response,req : TStringlist;
auth,blogid : string;
begin
blogid := '00000000000000000000000';
request := TStringList.Create;
response := TStringList.Create;
req := TStringList.Create;
IdHTTP1.Request.Connection := 'Keep-Alive';
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv23;
request.Clear();
request.Values['accountType'] := 'GOOGLE';
request.Values['Email'] := 'xxx@gmail.com';
request.Values['Passwd'] := 'yyy';
request.Values['service'] := 'blogger';
response.Text :=IdHTTP1.Post('https://www.google.com/accounts/ClientLogin',request);
auth := response.Values['Auth']; //working perfectly
req.Clear();
req.Text := Memo2.Lines.Text; //put entry into request var
IdHTTP1.Request.CustomHeaders.Clear();
IdHTTP1.Request.CustomHeaders.Add('GData-Version: 2');
//IdHTTP1.Request.CustomHeaders.Add('Authorization: GoogleLogin auth='+auth);
IdHTTP1.Request.CustomHeaders.Values['Authorization'] := 'GoogleLogin auth = '+auth;
IdHTTP1.Request.ContentType := 'application/atom+xml';
memo1.Text := IdHTTP1.Post('https://www.blogger.com/feeds/' + blogid + '/posts/default', req); // I got "HTTP/1.0 400 Bad Request" error right here.
end;
发生错误
memo1.Text := IdHTTP1.Post('https://www.blogger.com/feeds/' + blogid + '/posts/default', req);
有人知道我做错了什么吗?
非常感谢任何帮助。谢谢!
最佳答案
您正在使用 TStringList
发布 XML 数据。即使您没有将 Request.ContentType
设置为 application/x-www-form-urlencoded
,发布 TStrings
对象将始终对数据就像你做的那样。这可能就是服务器提示的原因,因为它不会正确接收您想要的 XML。要发布 XML 数据,您需要使用 TStream
来代替,例如:
procedure TForm1.Button1Click(Sender: TObject);
var
request, response : TStringlist;
req : TStream;
auth, blogid : String;
begin
blogid := '00000000000000000000000';
IdHTTP1.Request.Connection := 'Keep-Alive';
IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv23;
request := TStringList.Create;
try
response := TStringList.Create;
try
request.Values['accountType'] := 'GOOGLE';
request.Values['Email'] := 'xxx@gmail.com';
request.Values['Passwd'] := 'yyy';
request.Values['service'] := 'blogger';
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
response.Text := IdHTTP1.Post('https://www.google.com/accounts/ClientLogin', request);
auth := response.Values['Auth'];
finally
response.Free;
end;
finally
request.Free;
end;
req := TMemoryStream.Create;
try
Memo2.Lines.SaveToStream(req);
req.Position := 0;
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.Values['GData-Version'] := '2';
IdHTTP1.Request.CustomHeaders.Values['Authorization'] := 'GoogleLogin auth = ' + auth;
IdHTTP1.Request.ContentType := 'application/atom+xml';
Memo1.Text := IdHTTP1.Post('https://www.blogger.com/feeds/' + blogid + '/posts/default', req);
finally
req.Free;
end;
end;
关于delphi - 博主通过 idHTTP : error 400 bad request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9013443/
我正在准备申请。 IDHTTP:使用Get方法。但是有一些问题。我要创建一个代理列表,然后单击添加IDHTTP的列表框项(代理地址)。对不起,我不太会英语。 我的密码; procedure TForm
我正在尝试使用 Indy HTTP 类进行 HTTP 身份验证。但由于某种未知的原因,我在这一行中收到了访问冲突错误:IdHTTP1.Request.Authentication.Username :
我正在使用 idhttp (Indy) 进行一些网站检查。我想要它做的就是在发送请求后检查服务器的响应代码,我不想实际上必须从服务器接收 HTML 输出,因为我只监视 200 OK 代码,任何其他代码
请向我解释如何使用 SSL (https://) 从服务器下载文件。我在互联网上没有找到合适的答案。 每个人都在谈论 TIdSSLIOHandlerSocket,但我只有 TIdSSLIOHandle
请向我解释如何使用 SSL (https://) 从服务器下载文件。我在互联网上没有找到合适的答案。 每个人都在谈论 TIdSSLIOHandlerSocket,但我只有 TIdSSLIOHandle
我如何使用 IdHTTP 将消息作为 PostMan 发送如下: 我的第一次尝试如下: function TIdFoo.SendIM(const AID, AMessage: string): Boo
印地 10: 两个线程,线程 1 正在调用 TIdHTTP 上的 Get 并阻止读取数据。线程2将在同一个TIdHTTP上调用disconnect以中断Get。 我在 TIdHTTP 上使用摘要式身份
使用:Delphi 2010,最新版本的 Indy 我正在尝试从 Google Adsense 网页上抓取数据,目的是获取报告。然而到目前为止我还没有成功。它在第一个请求后停止并且不再继续。 使用 F
我使用 TIdHttp 来获取网页内容。响应头指示内容编码为utf8。我想在控制台中打印内容为CP936(简体中文),但实际内容不可读。 Result := TEncoding.Utf8.GetStr
一家公司要求我记录我们的客户端仅在软件级别通过 TCP 协议(protocol)与我们的服务器进行通信。我一直假设 IdHTTP 使用 TCP,但我不确定如何证明它。我在文档中找不到它。 最佳答案 T
我已指定 OnStatus 处理程序使用 AStatusText 参数更新标签。 在处理程序中设置断点时,它只会在我执行 Get("google.com") 时在 hsConnected 状态下中断。
像这样使用 TIdHttp 时: Memo1.Text := IdHTTP1.post(url,data); 如果 memo1 没有给出 http 错误,我可以获得响应内容。但是当它给出 http 错
好的,我已经动态创建了 Idhttp,如下所示 procedure TForm1.Button1Click(Sender: TObject); Var Resp : String; begin
我发现,当为 TIdHTTP 组件设置 ConnectTimeoout 属性时,它会使请求(GET 和 POST)变慢约 120 毫秒? 这是为什么,我可以以某种方式避免/绕过它吗? Env:D201
如何检查特定响应代码(例如 200 OK)的目标 URL,而 Indy 不会抛出各种异常。连接超时、连接正常关闭等... 例如,如果 URL 不正确或者找不到或无法访问其主机。即使我试图忽略它们,In
我目前有这个 TThread 将一些图像下载到桌面,这是线程代码: type TDownloadUpdateAnimateEvent = procedure(Sender: TObject; AA
我正在尝试运行此代码: var objHttp: TIdHTTP; ... objHttp.HandleRedirects := True; objHttp.AllowCookies :=
我正在尝试使用 TIdHTTP 上传文件。问题是当请求发送到服务器时访问 token 会发生更改。 我使用的访问 token 是fJNhDM6TlcpeVmD8h3jFuPJS71sxwZB8bZBX
主要目标是将所有数据发送到远程 mysql 数据库。我使用 TidHTTP 作为 POST 方法。拥有近 10.000 条记录,约 2MB 数据。当我运行delphi代码时,上传json数据。但有些记
我使用 IdHTTP.get 来获取 url 的 HTMl,但是在这个 url 中是一个用 ajax 加载的表,我必须等待几秒钟才能加载它,然后才能获取页面的 HTML。 我可以等一下吗? 最佳答案
我是一名优秀的程序员,十分优秀!