הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   עזרה| לא מצליח להתחבר לאתר באמצעות עוגיות בלבד [PHP] (https://hosts.co.il/forums/showthread.php?t=104367)

Rebuilt 26-06-13 15:36

עזרה| לא מצליח להתחבר לאתר באמצעות עוגיות בלבד [PHP]
 
שלום לכם.

בימים אלו אני כותב משהו לאתר מסויים ואני צריך להתחבר אליו מרחוק... החיבור של הסוקט עצמו עובד נפלא אך הבעיה היא ההתחברות למשתמש, אני מנסה לשלוח את העוגיות בהאדרים (headers) וזה עדיין לא עובד.

PHP קוד:

<?php

$soc 
socket_create(AF_INETSOCK_STREAM,SOL_TCP);
header('Content-type: text/html;charset=utf-8');
$t socket_connect($soc,  gethostbyname('www.some-site.co.il'),80);
if(!
$t){
    die(
socket_strerror(socket_last_error($soc)));
}
$request "GET /some-page.php?x=11111 HTTP/1.1\r\n";
$request .= "Host: www.some-site.co.il\r\n";
$request .= "Cookie: cookie1=cookie1Value\r\n";
$request .= "Cookie: cookie2=cookie2Value \r\n";
$request .= "Cookie: cookie3=cookie3Value\r\n";

$request .= "Connection: Close\r\n";
$request .= "\r\n";
socket_write($soc,$request);
ob_start();
$buffer '';
$html '';
while ((
$s socket_recv($soc$buffer2048MSG_WAITALL))>0) {
$html .= $buffer;
}
echo 
substr($html,  strpos($html,"\r\n\r\n"),strlen($html));

העוגיות של האתר עצמן מסווגות כHTTP ONLY אבל זה לא אמור להפריע מכיוון שזה נוגע לJS.

באמת שאשמח לעזרה בלהבין למה העוגיות האלו לא מחברות את המשתמש שלי לאתר עצמו.
תודה מראש!

kobisl 26-06-13 22:40

PHP קוד:

function httpPost($url,$post=array(),$cookies=array())
{
$optsCookies='';
foreach(
$cookies as $key => $val) {$optsCookies.="Cookie: {$key}={$val}\r\n";}
$opts = array(
'http'=>array(
'method' => 'POST'
,'header'=>"Accept-language: en\r\n" 
."Content-type: application/x-www-form-urlencoded\r\n" 
.$optsCookies
,'content'=>http_build_query($post)
)
);
$context stream_context_create($opts);
return 
file_get_contents($urlfalse$context);


מקווה שזה יעזור =]

zoharesh 26-06-13 22:54

יש ספרייה במיוחד לדברים כאלה.
cURL תקרא עליה.

Rebuilt 27-06-13 09:21

ציטוט:

נכתב במקור על ידי zoharesh (פרסם 878824)
יש ספרייה במיוחד לדברים כאלה.
cURL תקרא עליה.

שמעתי על הספריה הזאת... איך היא יכולה לעזור לי בנושא?

ציטוט:

נכתב במקור על ידי kobisl (פרסם 878823)
PHP קוד:

function httpPost($url,$post=array(),$cookies=array())
{
$optsCookies='';
foreach(
$cookies as $key => $val) {$optsCookies.="Cookie: {$key}={$val}\r\n";}
$opts = array(
'http'=>array(
'method' => 'POST'
,'header'=>"Accept-language: en\r\n" 
."Content-type: application/x-www-form-urlencoded\r\n" 
.$optsCookies
,'content'=>http_build_query($post)
)
);
$context stream_context_create($opts);
return 
file_get_contents($urlfalse$context);


מקווה שזה יעזור =]

תודה רבה, אתמול בלילה התחלתי לעבוד על מחלקת WEBStream שבין היתר תעשה את זה, במידה וזה לא יעבוד אנסה את מה שכתבת.
רק משהו שלא הבנתי למה בAccept lan כתבת en? אני עשיתי את זה עם he.
אשמח לתשובה.

חלק מהקוד:
PHP קוד:

class WEBStream {

    private 
$socket;
    private 
$username;
    private 
$password;
    private 
$headers;
    private 
$cookies;
    private 
$web;

    public function 
__construct($web,$username$password) {
        
$this->web $web;
        
$this->username $username;
        
$this->password $password;
        
$this->socket socket_create(AF_INETSOCK_STREAMSOL_TCP);
        
$t socket_connect($this->socketgethostbyname($this->web), 80);
        if (!
$t) {
            die(
'Error at INIT of WEBStream class: ' socket_strerror(socket_last_error($this->socket)));
        }
        
$this->headers "Accept-Language: he-IL,he;\r\nConnection: Keep-Alive\r\nHost: {$this->web}\r\nUser-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36\r\n";
    }

    private function 
_REQUEST($method$URI$content) {
        
$xcookies = array();
            foreach (
$this->cookies as $key => $value) {
                
$xcookies[] = "$key=$value";
            }
            
$xcookies implode($xcookies'; ');
        
$request "$method /$URI HTTP/1.1\r\nCookie: $xcookies\r\n{$this->headers}\r\n$content";
        
socket_write($this->socket$requeststrlen($request));
    } 

ממה שאתה רואה, זה יכול לעבוד בינתיים? זאת רק טיוטה ועוד לא מוכנה להרצה... אשמח לתשובה,
תודה מראש!

kobisl 27-06-13 10:12

אני לא מבין למה אתה מתעקש לפתוח ולטפל בסוקט בזמן שיש פונקציות שנועדו לעשות את העבודה בשבילך כמו file_get_contents וכמו cURL .
אני מציע לך בכל זאת לנסות את הפונקציה שכתבתי לך כי היא עובדת מצויין.

Rebuilt 27-06-13 10:48

ציטוט:

נכתב במקור על ידי kobisl (פרסם 878834)
אני לא מבין למה אתה מתעקש לפתוח ולטפל בסוקט בזמן שיש פונקציות שנועדו לעשות את העבודה בשבילך כמו file_get_contents וכמו cURL .
אני מציע לך בכל זאת לנסות את הפונקציה שכתבתי לך כי היא עובדת מצויין.

זו לא התעקשות מהבחינה הזו... אני גם רוצה לבחון את רמת הביצוע שלי בOOP בסוגיות הללו.
קודם כל שוב, תודה רבה על הפונקציה, אעזר בה במידה ואראה לנכון. (לא שאני עושה לך טובה בכך..)

אשמח אם בכל זאת תרשום לי מה לא בסדר בקוד שלי... זה לא יעבוד באותה המידה? הקוד לא יעיל?

אדיר 29-06-13 10:30

קוד:

Cookie: cookie1=a;cookie2=b;cookie3=c;

zoharesh 29-06-13 12:16

במקומך (אם כבר OOP) הייתי יוצר פונקציה בקלאס שהתפקיד שלה זה להוסיף header ככה שבמקום השורה המבולגנת הזו:
PHP קוד:

$this->headers "Accept-Language: he-IL,he;\r\nConnection: Keep-Alive\r\nHost: {$this->web}\r\nUser-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36\r\n"

יהיה לך משהו מסודר יותר בסגנון הזה:
PHP קוד:

$myClass->addHeader('Accept-Language: he-IL,he');
$myClass->addHeader('Host: www.hosts.co.il');
$myClass->addHeader('Accept-Encoding: gzip, deflate');
$myClass->addHeader('Connection: Keep-Alive'); 

כי עד עכשיו הקוד שלך נראה...סלט

איציק ברבי 29-06-13 20:50

היי, אתה יכול לעבוד בOOP גם בcURL היא מובנת לדברים האלה, חבל על ניצול המשאבים של השרת שלך.

Rebuilt 01-07-13 21:38

ציטוט:

נכתב במקור על ידי אדיר (פרסם 878964)
קוד:

Cookie: cookie1=a;cookie2=b;cookie3=c;

תודה לך, הסתדרתי כבר :)

ציטוט:

נכתב במקור על ידי zoharesh (פרסם 878967)
במקומך (אם כבר OOP) הייתי יוצר פונקציה בקלאס שהתפקיד שלה זה להוסיף header ככה שבמקום השורה המבולגנת הזו:
PHP קוד:

$this->headers "Accept-Language: he-IL,he;\r\nConnection: Keep-Alive\r\nHost: {$this->web}\r\nUser-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36\r\n"

יהיה לך משהו מסודר יותר בסגנון הזה:
PHP קוד:

$myClass->addHeader('Accept-Language: he-IL,he');
$myClass->addHeader('Host: www.hosts.co.il');
$myClass->addHeader('Accept-Encoding: gzip, deflate');
$myClass->addHeader('Connection: Keep-Alive'); 

כי עד עכשיו הקוד שלך נראה...סלט

שכתבתי את הקוד לפחות 4 פעמים ועכשיו הוא נראה יחסית טוב ולא מסורבל, תודה על ההצעה!


ציטוט:

נכתב במקור על ידי איציק ברבי (פרסם 878983)
היי, אתה יכול לעבוד בOOP גם בcURL היא מובנת לדברים האלה, חבל על ניצול המשאבים של השרת שלך.

אני זה שקניתי דרכך את dbz-online 8-)

כמה משאבים זה יבזבז, ובכללי זה כ"כ קריטי שחייב לוותר על זה?


כל הזמנים הם GMT +2. הזמן כעת הוא 00:34.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ