|
Joined: Mar 2008
Posts: 24
Ameglian cow
|
OP
Ameglian cow
Joined: Mar 2008
Posts: 24 |
Is it possible to connect to facebook via mIRC? Im using mIRC 6.16. I have the SSL dlls in my mIRC and system32 ($sslready = $true). I tried writing this script but the only output I get is "connection made". Any clues?
alias get.fb.login { sockclose get.fb.login sockopen -e get.fb.login login.facebook.com 443 } on *:sockopen:get.fb.login:{ if (!$sockerr) { var %form = email=me@gmail.com&pass=mypassword //echo 4 -a connection made sockwrite -n $sockname POST /login.php HTTP/1.1 sockwrite -n $sockname Host: login.facebook.com sockwrite -n $sockname Content-Type: application/x-www-form-urlencoded sockwrite -n $sockname Content-Length: $len(%form) sockwrite -n $sockname Connection: Keep-Alive sockwrite -n $sockname sockwrite -n $sockname %form } else { //echo -a sockerr } }
on *:sockread:get.fb.login:{ sockread %temp //echo -a %temp }
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
Change HTTP/1.1 to HTTP/1.0 and see if that helps. It's almost always best to use 1.0 for sockets.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Mar 2008
Posts: 24
Ameglian cow
|
OP
Ameglian cow
Joined: Mar 2008
Posts: 24 |
Yeah I already tried changing to 1.0 before. No difference. Im not getting any output returned.
|
|
|
|
Joined: Sep 2005
Posts: 2,881
Hoopy frood
|
Hoopy frood
Joined: Sep 2005
Posts: 2,881 |
|
|
|
|
Joined: Mar 2008
Posts: 24
Ameglian cow
|
OP
Ameglian cow
Joined: Mar 2008
Posts: 24 |
Hey thanks. That prompted me to try mIRC 6.21 and it works! I got a popup about a certificate and I accepted it. HTTP/1.1 302 Found Date: Sat, 22 Mar 2008 21:01:51 GMT Server: Apache/1.3.37.fb1 Location: http://www.facebook.com/common/browser.phpKeep-Alive: timeout=60, max=988 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html; charset=utf-8 0 Its redirecting to this url: http://www.facebook.com/common/browser.phpSo now the problem is its saying my browser is not supported. Any way around this? You are using an incompatible web browser. Sorry, we're not cool enough to support your browser. Please keep it real with one of the following browsers: * Firefox * Opera * Safari * Flock
Last edited by tparry; 22/03/08 09:45 PM.
|
|
|
|
Joined: Dec 2002
Posts: 503
Fjord artisan
|
Fjord artisan
Joined: Dec 2002
Posts: 503 |
Fake a User-Agent string.
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
Send this in your sockopen: User-agent: Opera/9.00 (Windows NT 4.0; U; en)
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Mar 2008
Posts: 24
Ameglian cow
|
OP
Ameglian cow
Joined: Mar 2008
Posts: 24 |
Great! Thanks works. Now I get past the browser check. I seem to be having problems logging in though. I get the cookie, but I seem to end back at the login screen. Heres my code: alias fb.login {
sockclose fb.login
unset %fb.cookie
sockopen -e fb.login login.facebook.com 443
}
on *:sockopen:fb.login:{
if (!$sockerr) {
var %fb.login = $+(email=me@gmail.com,$chr(38),pass=mypass,$chr(38),persistent=1)
//echo 4 -a %fb.login
sockwrite -nt $sockname POST /login.php HTTP/1.1
sockwrite -nt $sockname Host: login.facebook.com
sockwrite -nt $sockname User-agent: Opera/9.00 (Windows NT 4.0; U; en)
sockwrite -nt $sockname Content-Type: application/x-www-form-urlencoded
sockwrite -nt $sockname Content-Length: $len(%fb.login)
; sockwrite -nt $sockname Connection: Keep-Alive
sockwrite -nt $sockname
sockwrite -nt $sockname %fb.login
}
else { //echo -a sockerr }
}
on *:sockread:fb.login:{
sockread %temp
//echo -a Out: %temp
if ($fb.cookie(%temp)) { tokenize 61 $v1 | hadd -m TB.hfs.cookie $1 $2 }
}
alias fb.cookie {
var %r $regex($1-,/Set-Cookie:([^;]+)|$)/U)
return $regml(1)
}
...and heres the output: Out: HTTP/1.1 200 OK
Out: Date: Sun, 23 Mar 2008 07:17:11 GMT
Out: Server: Apache/1.3.37.fb1
Out: Expires: Mon, 26 Jul 1997 05:00:00 GMT
Out: Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Out: Pragma: no-cache
Out: P3P: CP="HONK"
Out: Set-Cookie: datr=ab0b5084325b9c190859d42801e2666643843c16938855febdd0125ef7bc919c; expires=Tue, 22-Apr-2008 07:17:11 GMT; path=/; domain=.facebook.com; httponly
Out: Set-Cookie: test_cookie=1; path=/; domain=.facebook.com; httponly
Out: Set-Cookie: login=+; path=/; domain=.facebook.com; httponly
Out: Set-Cookie: login_x=me%40gmail.com; expires=Thu, 17-Jul-2008 01:03:51 GMT; path=/; domain=.facebook.com; httponly
Out: Set-Cookie: reg_fb_gate=https%3A%2F%2Flogin.facebook.com%2Flogin.php; path=/; domain=.facebook.com; httponly
Out: Set-Cookie: reg_fb_ref=https%3A%2F%2Flogin.facebook.com%2Flogin.php; path=/; domain=.facebook.com; httponly
Out: Transfer-Encoding: chunked
Out: Content-Type: text/html; charset=utf-8
Out:
Out: 1c4b
Out: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
Out: "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Out: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="facebook">
Out: <head>
Out: <title>Login | Facebook</title>
Out: <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> I truncated the output. Some lines are too long, and its pretty much just the login/registration form. Can anyone see why its not logging in? I can log in from firefox, so its not account problem.
|
|
|
|
Joined: Mar 2008
Posts: 24
Ameglian cow
|
OP
Ameglian cow
Joined: Mar 2008
Posts: 24 |
If i include the Keep-Alive, I get this output. Should I be including it or not? Out: HTTP/1.1 200 OK
Out: Date: Sun, 23 Mar 2008 07:46:43 GMT
Out: Server: Apache/1.3.37.fb1
Out: Expires: Mon, 26 Jul 1997 05:00:00 GMT
Out: Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Out: Pragma: no-cache
Out: P3P: CP="HONK"
Out: Set-Cookie: datr=d7f44881e462c6d90042d7e6c53970fcf1702b31f55f7e2e5c829e735b113e91; expires=Tue, 22-Apr-2008 07:46:43 GMT; path=/; domain=.facebook.com; httponly
Out: Set-Cookie: test_cookie=1; path=/; domain=.facebook.com; httponly
Out: Set-Cookie: login=+; path=/; domain=.facebook.com; httponly
Out: Set-Cookie: login_x=me%40gmail.com; expires=Thu, 17-Jul-2008 01:33:23 GMT; path=/; domain=.facebook.com; httponly
Out: Set-Cookie: reg_fb_gate=https%3A%2F%2Flogin.facebook.com%2Flogin.php; path=/; domain=.facebook.com; httponly
Out: Set-Cookie: reg_fb_ref=https%3A%2F%2Flogin.facebook.com%2Flogin.php; path=/; domain=.facebook.com; httponly
Out: Keep-Alive: timeout=60, max=917
Out: Connection: Keep-Alive
Out: Transfer-Encoding: chunked
Out: Content-Type: text/html; charset=utf-8
Out: Set-Cookie: NSC_mphjo=445236773660;expires=Sun, 23-Mar-08 08:01:32 GMT;path=/
Out:
Out: 1c47
Out: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
Out: "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Out: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" id="facebook">
Out: <head>
Out: <title>Login | Facebook</title>
Out: <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
|
|
|
Joined: Oct 2003
Posts: 3,918
Hoopy frood
|
Hoopy frood
Joined: Oct 2003
Posts: 3,918 |
you *did* log in, that was actually a response for a successful login right there.
as far as subsequent requests go, you need to use that cookie information and send it back to the browser with each request you make (the point of cookies). Yes, you must store and send back all of the data in those Set-Cookie headers... each one. If you don't, facebook has no way of tracking your previous request and can't detect that you are indeed logged in-- even though *you are*.
- argv[0] on EFnet #mIRC - "Life is a pointer to an integer without a cast"
|
|
|
|
Joined: Mar 2008
Posts: 24
Ameglian cow
|
OP
Ameglian cow
Joined: Mar 2008
Posts: 24 |
you *did* log in, that was actually a response for a successful login right there.
as far as subsequent requests go, you need to use that cookie information and send it back to the browser with each request you make (the point of cookies). Yes, you must store and send back all of the data in those Set-Cookie headers... each one. If you don't, facebook has no way of tracking your previous request and can't detect that you are indeed logged in-- even though *you are*. Are you sure? Because normally when you login you're redirected to your home: http://www.facebook.com/home.php? and im not getting that data back. alias get.hfs.recent {
sockclose get.hfs.recent
sockopen get.hfs.recent www.facebook.com 80
}
on *:sockopen:get.hfs.recent:{
if (!$sockerr) {
var %i 1
while ($hget(TB.hfs.cookie,%i).item) { var %cookie %cookie $+($v1, =,$hget(TB.hfs.cookie,$v1),;) | inc %i }
sockwrite -n $sockname GET /home.php? HTTP/1.1
sockwrite -n $sockname Host: www.facebook.com
sockwrite -n $sockname User-agent: Opera/9.00 (Windows NT 4.0; U; en)
sockwrite -n $sockname Accept: */*
sockwrite -n $sockname Cookie: %cookie
sockwrite -n $sockname
}
else { //echo -a sockerr }
}
on *:sockread:get.hfs.recent:{
sockread %temp
if (%temp != $NULL) {
//echo -a OUT2: %temp
}
}
...and the output: OUT2: HTTP/1.1 302 Found
OUT2: Date: Sun, 23 Mar 2008 08:43:22 GMT
OUT2: Server: Apache/1.3.37.fb1
OUT2: Expires: Mon, 26 Jul 1997 05:00:00 GMT
OUT2: Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
OUT2: Pragma: no-cache
OUT2: P3P: CP="HONK"
OUT2: Set-Cookie: next=http%3A%2F%2Fwww.facebook.com%2Fhome.php%3F; path=/; domain=.facebook.com; httponly
OUT2: Set-Cookie: next_path=%2Fhome.php%3F; path=/; domain=.facebook.com; httponly
OUT2: Set-Cookie: next=http%3A%2F%2Fwww.facebook.com%2Fhome.php%3F; path=/; domain=.facebook.com; httponly
OUT2: Set-Cookie: next_path=%2Fhome.php%3F; path=/; domain=.facebook.com; httponly
OUT2: Location: http://www.facebook.com/login.php
OUT2: Transfer-Encoding: chunked
OUT2: Content-Type: text/html; charset=utf-8
OUT2: 0
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
You are probably not redirected there because you aren't sending the cookie information. Basically, you log in, then it goes to redirect you and doesn't have the cookie information, so sends you back to the login screen.
And don't forget that 1.0 will be easier to work with later than 1.1.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Mar 2008
Posts: 24
Ameglian cow
|
OP
Ameglian cow
Joined: Mar 2008
Posts: 24 |
Well after I login, I run "get.hfs.recent" (see my last reply) and im sending the cookie info. The output from that is redirecting me to the login screen. Which makes me believe it didnt login properly.
|
|
|
|
Joined: Mar 2008
Posts: 24
Ameglian cow
|
OP
Ameglian cow
Joined: Mar 2008
Posts: 24 |
I got it working now. The only problem im left with is dealing with long strings. How can I manipulate the html data when I get lines that are 1000+ characters long?
* /echo: line too long (line 28, script1.mrc)
|
|
|
|
Joined: Aug 2006
Posts: 183
Vogon poet
|
Vogon poet
Joined: Aug 2006
Posts: 183 |
I think the only solution is to use binary data, but as I don't do that very often I really can't offer much help with it. Sorry.
Yar
|
|
|
|
Joined: Oct 2003
Posts: 3,918
Hoopy frood
|
Hoopy frood
Joined: Oct 2003
Posts: 3,918 |
As mentioned above you need to store the data in files or binary variables. /bset or /fopen would be good /help topics to look at
- argv[0] on EFnet #mIRC - "Life is a pointer to an integer without a cast"
|
|
|
|
Joined: Mar 2008
Posts: 24
Ameglian cow
|
OP
Ameglian cow
Joined: Mar 2008
Posts: 24 |
As mentioned above you need to store the data in files or binary variables. /bset or /fopen would be good /help topics to look at Ok, so I guess I have no choice but to store it directly to a file. I presume like this: on *:sockread:test:{ sockread -n &test | bwrite thetest.txt -1 -1 &test } Since you cant manipulate binary variables, I guess my only choice is to read in the file and manipulate the data. So do I have to use /fopen and $fread to handle files with really long lines? Is it the only way? The html code im trying to filter only has 200+ lines, but a few of the lines are over 65,000 characters long! I need to go through the 65,000+ line and filter everything between the text: <div class="results" (everything in here up to) </table></div> The data inside is over 2,000 characters, so I'm not sure how im expected to use mIRC to pattern match that. Is there an easy way to do that? Argh mIRC is so limited
|
|
|
|
Joined: Oct 2003
Posts: 3,918
Hoopy frood
|
Hoopy frood
Joined: Oct 2003
Posts: 3,918 |
well, mIRC's script language is built for IRC which has only a ~500 character limit... so what would you even do with more than that much data (in theory)?
The question is, do you really need to grab that much data at a time? most likely, you're only going to need about ~100 bytes of data at a time-- especially if youre planning on sending this over IRC ..
So, with that in mind, you can easily craft matches that return small amounts of data from the complete output
Though, if it were me, I'd just be using Ruby4mIRC, Tcl4mIRC or Python4mIRC to do the work. mIRC really isn't meant for sifting through large amounts of data.
- argv[0] on EFnet #mIRC - "Life is a pointer to an integer without a cast"
|
|
|
|
Joined: Mar 2008
Posts: 24
Ameglian cow
|
OP
Ameglian cow
Joined: Mar 2008
Posts: 24 |
Correct, I only need small amounts of data which I will store in a hash table. From the 66,000+ char line, I need to loop through 20 similar sections which contains about 3000 chars each, containing things like name, price, link, img. 95% of the data is just html that I need to discard. Is it easy to do this in regular mIRC? Otherwise i'll have to get messy and call a perl script or something. I was hoping to keep it tidy and have it all done within mIRC. I started writing a script (using fopen/fseek/$fread) which seeks through the long lines in sections of 200 bytes, but the problem is sometimes the data falls either side of the 200 byte chunks. Rather messy.
|
|
|
|
Joined: Oct 2003
Posts: 3,918
Hoopy frood
|
Hoopy frood
Joined: Oct 2003
Posts: 3,918 |
how do you know you cant get at the data in first pass as it comes in from the sockread? all you'd need to do would be apply a regex to the incoming data
sockread %temp
if ($regex(%temp,/<p class="username">(.+?)</p>/)) {
echo -a username is $regml(1)
}
While it's not exactly the most robust solution, this approach works 95% of the time because there is usually some unique data string you can search for surrounding every piece of data you need to extract.
- argv[0] on EFnet #mIRC - "Life is a pointer to an integer without a cast"
|
|
|
|
|