티스토리 뷰


상황
다른서버에 값을 전달해서 결과를 받아야하는데,
결과값에 따라 다음 페이지가 결정되고, 현재 페이지에서 해결을 해야만 함

처리
소켓을 이용하여 요청을 하고, 결과값을 응답받아 필요에 따라 파싱한다.

    $fileHost = "다른서버ip 또는 도메인";
    $filePath = "요청할 페이지의 경로";
    $param = "넘길 파라미터";

    $fp = fsockopen ($fileHost, 80, $errno, $errstr, 2);
    if ($fp) {
        fputs($fp,"POST $filePath HTTP/1.1\r\n");
        fputs($fp,"Host: $fileHost\r\n");
        fputs($fp,"Referer: http://$fileHost$filePath\r\n");
        fputs($fp,"User-Agent: ".$_SERVER["HTTP_USER_AGENT"]."\r\n");
        fputs($fp,"Content-type: application/x-www-form-urlencoded\n");
        fputs($fp,"Content-length: 16\n");
        fputs($fp,"Connection: Close\r\n\r\n");
        fputs($fp,"mid=abc&tid=llas\r\n");
        fputs($fp,"\r\n");
        while (!feof($fp)) $data = $data.fgets($fp,4096);
    }
    fclose ($fp);

append
1. 제일 마지막헤더에 줄바꿈이 두번 있고, 그 다음에 파라미터 값이 들어감
2. get 방식은 되는데 post 는 계속해서 되지 않았었는데, 문제는 파라미터값 다음에 줄바꿈이 한번만 들어가서였다. 두번으로 붙였더니 정상 동작함. 즉, 헤더 마지막에 줄바꿈을 두번하고, 파라미터 다음에 줄바꿈을 두번해야한다. 

============================================================================================

요구하시는분들이 꽤 있길래 저도 좀 알아보고 하는겸 치고
이것저것 문서를 봤습니다.
혹시 잘 모르시겠으면 리플달아주세요.
문서들이 너무 주먹구구식으로 나왔는데.. Zend에 괜찮게 나왔더군요.
일단 링크들은
젠드 링크는 여기고요
<a href='http://www.zend.com/zend/spotlight/mimocsumissions.php'>Zend</a>
Content-type정의는
<a href='http://www.mime-rpc.com/examples.html'>Mime-rpc</a>입니다.
혹시나 해서 그러는데..
응용방법은 일단 위에 젠드링크에서는 post값만 보내는 방법이고요..
mime을 변경시키면 multipart/form-data로 해서 그림이나 여타 파일도
보낼수 있으니 잘 참고 하시기 바랍니다.
일단 해보시기 전에 간단한 원리(?)부터 해보죠..
telnet kr.yahoo.com 80 이라고 치신다음에
GET /index.html HTTP/1.0이라고 치시면
야휴 문서가 소스로 쫘악 나올겁니다.
요것만 봐도 어느정도 감을 잡으시겠지요?
자 그다음은 너무 쉬우니깐요.. 밑에 있는
test1.php와 test2.php그리고 결과 값이 샘플로 있으니깐
확인해보세요
결과 값에서 1c라는 값이 있는데 요거는 결과값의 문자열 길이고요
맨밑에 0은 저도 잘모르겠습니다.
제 추측으로는 fget으로 얻어오고 남은 바이트 같아요..
항상 다 퍼오니깐 항상 0이겠지요..
그럼 얼른얼른 테스트해보시고 적용해보세요..


----- test1.php -------------------------------------------------------------
<?
$str = "param1=aaa&param2=bbb";
$len = strlen($str);

$sendData = "POST /~keke/test2.php HTTP/1.1\r\n".
"Host: 192.168.0.210\r\n".
"User-Agent: keke\r\n".
"Content-type: application/x-www-form-urlencoded\r\n".
"Content-length: $len\r\n\r\n".
"$str\r\n";

$fp = fsockopen("192.168.0.210", 80, &$errno, &$errstr);

if(!$fp)
{
echo "$errstr ($errno)<br>\n"; 
} else
{
fputs($fp, $sendData);
while(!feof($fp))
{
echo fgets($fp, 4096);
}
fclose($fp);
}
?>

------------ test2.php -----------------------------------------------------
<?
echo "param1 = $_POST[param1]<br>";
echo "param2 = $_POST[param2]";
?>

------------ 결과값 --------------------------------------------------------
HTTP/1.1 200 OK
Date: Wed, 24 Jul 2002 17:32:55 GMT
Server: Apache/1.3.26 (Unix) PHP/4.2.1
X-Powered-By: PHP/4.2.1
Transfer-Encoding: chunked
Content-Type: text/html

1c
param1 = aaa<br>param2 = bbb

'기억하자정보' 카테고리의 다른 글

리눅스 백업 스크립트  (0) 2011.12.01
우분투 11.10 에서 JDK 설치  (0) 2011.11.29
HTTP 1.1의 Content Length와 Transfer Encoding  (0) 2009.10.24
PHP 소켓 POST로.. XML 값  (0) 2009.10.24
JScript.Encode 복호화 방법  (0) 2008.01.26
댓글
안내
궁금한 점을 댓글로 남겨주시면 답변해 드립니다.