【问题标题】:Delphi get http responseDelphi获取http响应
【发布时间】:2013-10-29 06:54:46
【问题描述】:

我正在尝试从 delphi 中的 url 发送和获取响应

我正在使用 WinInet

这是我正在使用的功能

编辑:我可以成功发送并获得响应问题是网站无法识别发送的 edt1 数据并重播无效响应我在 vb10 的工作代码下方发布了代码工作完美,这有什么区别代码和我的还是我做错了什么?

  in button1

    var
    s:= string;
    begin
    s:= GetUrlContent('website url ' + edt1.text);
    memo.lines.add(s);
    end; 



function GetUrlContent(const Url: string): string;
    var
      NetHandle: HINTERNET;
      UrlHandle: HINTERNET;
      Buffer: array[0..1024] of Char;
      BytesRead: dWord;
    begin
      Result := '';
      NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

      if Assigned(NetHandle) then
      begin
        UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);

        if Assigned(UrlHandle) then
          { UrlHandle valid? Proceed with download }
        begin
          FillChar(Buffer, SizeOf(Buffer), 0);
          repeat
            Result := Result + Buffer;
            FillChar(Buffer, SizeOf(Buffer), 0);
            InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
          until BytesRead = 0;
          InternetCloseHandle(UrlHandle);
        end
        else
          { UrlHandle is not valid. Raise an exception. }
          raise Exception.CreateFmt('Cannot open URL %s', [Url]);

        InternetCloseHandle(NetHandle);
      end
      else
        { NetHandle is not valid. Raise an exception }
        raise Exception.Create('Unable to initialize');
    end;

但是当我的朋友使用 vb10 提出相同的要求时 完美的工作

这是他在vb中的代码示例

Dim httpWebRequest As HttpWebRequest = CType(WebRequest.Create("web-site url" + TextBox2.Text), HttpWebRequest)
httpWebRequest.ContentType = TextBox2.Text.Trim()
Dim httpWebResponse As HttpWebResponse = CType(httpWebRequest.GetResponse(), HttpWebResponse)
Dim streamReader As StreamReader = New StreamReader(httpWebResponse.GetResponseStream())
Dim text As String = streamReader.ReadToEnd()
Richtextbox1.text = text

我做错了什么?

【问题讨论】:

  • 您将格式错误的 URL 传递给您的函数。 s:= GetUrlContent('website url ' + edt1.text); 应该是 s := GetUrlContent(edt1.Text)
  • 是的,我做对了——我必须发送 url + edt1.text s:= geturlcontent('Here go the website url'+edt1.text); // 它的 url + edt1.text
  • 那么在你的问题中说明,所以我们不要猜测。您使用的是哪个 Delphi 版本?
  • 我在他的代码中看到他正在使用 ContentType 也许这就是我做错的地方我怎么能在 delphi 中做到这一点 - thx
  • 尝试将InternetOpen函数的用户代理(第一个参数)改成类似Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0的东西

标签: delphi delphi-7 webrequest


【解决方案1】:

抱歉,我不确定您的代码有什么问题,但如果您的最终目标是将网页中的内容加载到备忘录中,为什么不直接使用

Uses IdHTTP;

function getContent(url: String): String;
var
http : TIdHTTP;
begin
 http := TIdHTTP.Create(nil);
   try
     Result := http.Get(url);
   finally
     http.Free;
   end;
end;

Memo.Lines.Add(getContent('http://websiteurl.com'));

【讨论】:

猜你喜欢
  • 2022-06-28
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多