티스토리 뷰
상황
다른서버에 값을 전달해서 결과를 받아야하는데,
결과값에 따라 다음 페이지가 결정되고, 현재 페이지에서 해결을 해야만 함
처리
소켓을 이용하여 요청을 하고, 결과값을 응답받아 필요에 따라 파싱한다.
$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 는 계속해서 되지 않았었는데, 문제는 파라미터값 다음에 줄바꿈이 한번만 들어가서였다. 두번으로 붙였더니 정상 동작함. 즉, 헤더 마지막에 줄바꿈을 두번하고, 파라미터 다음에 줄바꿈을 두번해야한다.
다른서버에 값을 전달해서 결과를 받아야하는데,
결과값에 따라 다음 페이지가 결정되고, 현재 페이지에서 해결을 해야만 함
처리
소켓을 이용하여 요청을 하고, 결과값을 응답받아 필요에 따라 파싱한다.
$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¶m2=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
이것저것 문서를 봤습니다.
혹시 잘 모르시겠으면 리플달아주세요.
문서들이 너무 주먹구구식으로 나왔는데.. 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¶m2=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
[출처] 소켓이용해서 post형태로 보내기|작성자 탕구
'기억하자정보' 카테고리의 다른 글
리눅스 백업 스크립트 (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 |
- 안내
- 궁금한 점을 댓글로 남겨주시면 답변해 드립니다.