2014-10-30 3 views
1

내가 사용하고 Indys에서이 URL (포스트)를 제출 idhttp splittet델파이 idhttp 긴 URL 매개 변수가 자동으로

Procedure submit_post(url_string,EncodedStr:string;amemo:TMemo); 
var 
    aStream: TMemoryStream; 
    Params: TStringStream; 
begin 
    aStream := TMemoryStream.create; 
    Params := TStringStream.create(''); 

    try 
    with Fmain.IdHTTP1 do 
    begin 
     Params.WriteString(EncodedStr); 
     Request.ContentType := 'application/x-www-form-urlencoded'; 
     Request.Charset := 'utf-8'; 
     try 
     Response.KeepAlive := False; 
     Post(url_string, params, aStream); 
     except 
     on E: Exception do 
     begin 
      Screen.Cursor := crDefault; 
      exit; 
     end; 
     end; 
    end; 
    aStream.WriteBuffer(#0' ', 1); 
    aStream.Position := 0; 
    amemo.Lines.LoadFromStream(aStream); 
    Screen.Cursor := crDefault; 
    finally 
    aStream.Free; 
    Params.Free; 
    end; 
end; 

그것은 나를 위해 마법처럼 작동합니다. 300자를 포함하는 매개 변수를 사용하여 URL (게시물)을 제출하려하지만 "&"을 90 자마다 추가하여 자동으로 splittet됩니다. 따라서 서버는 300 개 대신 90 개의 문자 만받습니다.

이 자동 분리 기능을 사용하지 않고 300 자 매개 변수가있는 URL을 제출하려면 어떻게해야합니까?

+1

url_string 및 EncodedStr 내용과 서버에 도착한 정확한 데이터를 추가하십시오. –

답변

0
function SubmitPost(Params:String): string; 
const 
    URL= 'http://xxxx.com/register.php?'; 
var 
    lHTTP: TIdHTTP; 
    Source, 
    ResponseContent: TStringStream; 
    I:Integer; 
begin 
    lHTTP := TIdHTTP.Create(nil); 
    lHTTP.Request.ContentType := 'text/xml'; 
    lHTTP.Request.Accept := '*/*'; 
    lHTTP.Request.Connection := 'Keep-Alive'; 
    lHTTP.Request.Method := 'POST'; 
    lHTTP.Request.UserAgent := 'OS Test User Agent'; 
    Source := TStringStream.Create(nil); 
    ResponseContent:= TStringStream.Create; 
    try 
    try 
     lHTTP.Post(URL+Params, Source, ResponseContent); 
     Result := ResponseContent.DataString; 
    except 
     //your exception here 
    end; 
    finally 
    lHTTP.Free; 
    Source.Free; 
    ResponseContent.Free; 
    end; 
end; 

사용

mmo1.Text := SubmitPost('Username=xxxx&Password=xxxx'); 
0

나는 실수를 발견했다. 내 게시물 기능은 완벽하게 작동하지만 URL은 메모 라인에서 오는 params로 작성됩니다. "WantReturns = FALSE"를 사용하면 메모의 최대 줄 길이로 URL을 작성할 수 있습니다. 1 줄에 1024자를 입력해도 괜찮은 것 같습니다.