2012-10-19 3 views
10

TWebBrowser에서 Chromium으로 일부 코드를 변환하려고 시도 중이지만 HTTP 요청으로 게시물 및 헤더 데이터를 보내는 방법을 알아내는 데 문제가 있습니다.Chromium으로 게시물 및 헤더 데이터를 보내려면 어떻게해야합니까?

다음은 구현하려는 TWebBrowser 기능입니다.

var 
VHeader, PostData: OleVariant; 


PostData := VarArrayCreate([0, Length(XMLString) - 1], varByte) ;  
HeaderData := 'Content-Type: application/x-www-form-urlencoded'+ '\n'; 

WebBrowser1.Navigate(StrUrl,EmptyParam,EmptyParam,PostData,VHeader); 

Chromium과 동등한 작업을 수행하려면 어떻게해야합니까?

+0

는 [ 'example' (https://groups.google.com/forum/?fromgroups=#!topic/delphichromiumembedded/r1_ytEvBHEs) 델파이 CEF 랩퍼 이루어지는 POST 요청 거기 저자 자신. 델파이로 가서 테스트 할 곳을 찾으면 대답으로 게시 할 것입니다 (누군가가 더 빠르지 않을 경우 :-) – TLama

+1

감사합니다. 나는 조사 할 것입니다. – Trevor

+0

그래서 나는 그것을 얻게된다. (당신의 예제 TLama를 가지고) 헤더 데이터를 추가하는 것 외에는 .. 내 애플리케이션은 그것없이 (또는 이미 디폴트로 설정되어있다.) 괜찮아 보인다. 그러나 누군가가 헤더 데이터, 또는 여전히 대답하고 싶습니다. 나는 여전히 관심이있을 것입니다. 응답으로 그 링크를 놓으십시오. 그리고 받아 들일 것입니다. 고마워요! – Trevor

답변

9

Delphi Chromium Embedded에 대한 설명서가 없기 때문에 CEF의 C++ 버전에 대한 웹 요청을 보내는 데 필요한 요구 사항을 참조하겠습니다. 따라서 Chromium에서 요청을 전송하려면 LoadRequest 메소드를 사용해야합니다. 이를 사용하려면 요청 헤더 및 데이터 지정을 위해 HeaderMapCefPostData 개체와 함께 CefRequest 요청 개체 클래스의 개체 인스턴스가 필요합니다.

uses 
    ceflib; 

function CreateField(const AValue: AnsiString): ICefPostDataElement; 
begin 
    Result := TCefPostDataElementRef.New; 
    Result.SetToBytes(Length(AValue), PAnsiChar(AValue)); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Header: ICefStringMultimap; 
    Data: ICefPostData; 
    Request: ICefRequest; 
begin 
    Header := TCefStringMultimapOwn.Create; 
    Header.Append('Content-Type', 'application/x-www-form-urlencoded'); 

    Data := TCefPostDataRef.New; 
    Data.AddElement(CreateField('Data.id=27')); 
    Data.AddElement(CreateField('&Data.title=title')); 
    Data.AddElement(CreateField('&Data.body=body')); 

    Request := TCefRequestRef.New; 
    Request.Flags := WUR_FLAG_NONE; 
    Request.Assign('http://example.com/', 'POST', Data, Header); 

    Chromium1.Browser.MainFrame.LoadRequest(Request); 
end; 

이 같은 위의 코드의 다른 버전을 수행해야합니다 this thread에서 예 앙리 Gourvest의 (델파이 CEF 래퍼의 저자)에 확장

, 당신은 델파이에서 다음 의사 코드 같은 것을 시도 할 수 있습니다 이 글

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Header: ICefStringMultimap; 
    Data: ICefPostData; 
    Request: ICefRequest; 
begin 
    Request := TCefRequestRef.New; 
    Request.Url := 'http://example.com/'; 
    Request.Method := 'POST'; 
    Request.Flags := WUR_FLAG_NONE; 

    Header := TCefStringMultimapOwn.Create; 
    Header.Append('Content-Type', 'application/x-www-form-urlencoded'); 
    Request.SetHeaderMap(Header); 

    Data := TCefPostDataRef.New; 
    Data.AddElement(CreateField('Data.id=27')); 
    Data.AddElement(CreateField('&Data.title=title')); 
    Data.AddElement(CreateField('&Data.body=body')); 
    Request.PostData := Data; 

    Chromium1.Browser.MainFrame.LoadRequest(Request); 
end; 
+0

위대한 답변, 감사합니다! – Trevor

+0

도와 줘서 기쁩니다 ;-) – TLama

관련 문제