보험최저가로 가입하는요령 쉬운 돈벌기 방법
| 끝까지 읽어주시면 정말 고맙겠습니다. fopen,fsockopen을 사용하여 특정페이지의 원하는 문자열을 가지고 오는 공부를 하고있습니다.재미가 있어서 계속 파고있습니다. 그런데 로그인후에 값을 어떻게 가져오는지를 모르겠습니다. 이리저리 계속 삽질하다가 이렇게 질문글 올립니다. 제가 찾아본 바에 의하면 header값을 조작해주면 된다고 하는데 어떻게 조작을 해야할지 너무 어렵더군요. 일단 예를 들면 http://abc.com 싸이트에서 id=userid pass=1234 이렇게 로그인을 한후에 http://abc.com/a/b.html의 내용을 가지고 오고싶습니다. 이때 로그인 페이지는 http://abc.com/login.php입니다 그래서 fsockopen이나 fopen으로 http://abc.com/login.php?id=userid&pass=1234 이렇게 읽어 오고 그후에 제가 원하는 http://abc.com/a/b.html 이페이지를 읽을려고 하는데 애시당초 로그인페이지에서부터 로그인이 안되는겁니다. 고수님들 제 무지를 깨우쳐주십시요.간단한 소스를 적어주시면 고맙겠습니다. 추가로 header를 이용하여 쿠키나 세션을 어떻게 조작할수있다고 하는데 어떻게 하는지요. header를 이용하는 공부를 어디서 배워야하나요?책에는 안나와있는듯한데.. 참고로 외국 원서나 외국싸이트 추천 말고 한글로 된싸이트나 책있으면 추천좀 해주십시요 navyism님 제 질문에 대한 공부를 수업료라도 지불하고 배우고싶습니다.여기저기 싸이트에 올려도 속시원한 해결책이 안나오고있습니다. 혼자서 개삽질도 계속해보았지만 스킬이 딸려 도저히 해결이 안됩니다.공부가 멈춤상태인데 navyism님 제자가 되었으면 합니다. 진짜 수업료라도 지불해서라도 배우고싶습니다. 좀 도와주십시요 참고삼아 제 메신저 아이디 입니다. myinmy@hotmail.com 등록해주시면 영광입니다.
/* 제작자이름 : navyism 제작자메일 : navyism@chol.com 관련사이트 : http://navyism.com */ $fp = fsockopen ("호스트주소", 80); fputs($fp,"GET 파일경로 HTTP/1.0\n"); fputs($fp,"User-Agent: navyism\n"); fputs($fp,"Cookie: a=1&b=2\n"); fputs($fp,"\n"); while(! feof ($fp)) { $file .= fgets ($fp, 1024); } fclose ($fp); echo $file; |
웹상에서의 인증이란 결국은 쿠키가 베이스가 됩니다.
방법은 해당 포트와 연결을 맺으신뒤 직접 작성된 REQUEST HEADER를 소켓으로 날리는 방법을 사용하시어 인증을 패스하는 방법을 사용하시면 되겠습니다.
자세한 방법은 RFC를 참고하십시요.
예제를 보여드리겠습니다.
참고하셔서 도움이 되시길^^
//http://www.aaa.com/login.jsp // 폼의 값을 전송하여 실제로 로그인 처리가 이루어지는 페이지
$id_pass="id=test&pass=1234"; // 폼에 있는 텍스트 박스의 name 이름=값
$url1="www.aaa.com";
$url2="POST /login.jsp";
$url2.=" HTTP/1.1\r\n";
$url2.="Host: www.aaa.com\r\nConnection: close\r\nContent-Length: ".strlen($id_pass)."\r\n\r\n$id_pass\r\n";
$fp = fsockopen ($url1, 80, $errno, $errstr,30 );
if (!$fp) {
echo "? $errstr ($errno)<br>n";
} else {
fputs ($fp, $url2);
while (!feof($fp)) {
$line=fgets ($fp,1024);
if(ereg('Set-Cookie',$line)) {
$aaa=preg_split("/[:;]/",$line);
$cookie=trim($aaa[1]);
break;
}
}
}
//http://www.aaa.com/member/view.jsp // 실제 소스를 가져올 페이지
$url1="www.aaa.com";
$url2="get /member/view.jsp";
$url2.=" HTTP/1.1\r\n";
$url2.="Host: www.aaa.com\r\nConnection: close\r\nCookie: $cookie\r\n\r\n";
$fp = fsockopen ($url1, 80, $errno, $errstr,30 );
if (!$fp) {
echo "? $errstr ($errno)<br>n";
} else {
fputs ($fp, $url2);
while (!feof($fp)) {
$line=fgets ($fp,1024);
}
}
우선 fsockopen() 으로 원하시는 기능을 구현하는건 좀 힘들다고 봐야 합니다.
fsockopen() 로는 실제 브라우저가 서버와 통신하는 방법과 같이 접속하기 때문에 브라우저 역활을 해낼수 있는 프로그램을 작성해야만 가능하겠죠.
예를 들어 서버에서 로그인 처리를 위해 세션이나 쿠키를 사용할 경우 사용자쪽에서 쿠키처리를 해줘야 하는 부분이 문제가 됩니다.
그런데 다행이도 위와 같은 작업을 처리해주는 cURL 이란 라이브러리가 있습니다.
모든 서버가 CURL 을 사용할 수 있는건 아니기에 phpinfo()를 통해 CURL 이 사용 가능한지 확인해 보시기 바랍니다.
아래 소스는 질문에 있는 사이트에 aaaa/aaaa 로 로그인 해서 로그인이 필요했던 페이지를 출력하는 내용입니다.
<?
$post_data = array(
'user_id' => 'aaaa',
'password' => 'aaaa'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.euronight.co.kr/bbs/login_check.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, 'http://www.euronight.co.kr/bbs/zboard.php?id=minbak&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=40');
$content = curl_exec($ch);
echo $content;
?>
태초에 나는 개그이야기를 만들었다.
내말을 믿고 나를 따르면 천당,
내말을 믿지않고 나를 따르지 않으면 지옥,
나는 하늘나라(우주)에 사느니라.
그럼 난 외계인?
if($objSock)
{
$strHeader = "GET http://url부분 HTTP/1.1\r\n";
$strHeader .= "Host:호스트:포트\r\n";
$strHeader .= "Authorization:Basic " . base64_encode("아이디:암호") . "\r\n";
$strHeader .= "\r\n";
fputs($objSock, $strHeader);
$strResult = "";
while (!feof($objSock))
{
$strResult .= fgets($objSock, 65535);
}
fclose($objSock);
... $objSock = fsockopen(호스트, 포트, $strErrorNo, $strErrStr, 5);
if($objSock)
{
$strHeader = "GET http://url부분 HTTP/1.1\r\n";
$strHeader .= "Host:호스트:포트\r\n";
$strHeader .= "Authorization:Basic " . base64_encode("아이디:암호") . "\r\n";
$strHeader .= "\r\n";
fputs($objSock, $strHeader);
$strResult = "";
while (!feof($objSock))
{
$strResult .= fgets($objSock, 65535);
}
fclose($objSock);




웃대가리
