There's no standard way to log in to a website... In phpBB, all you need to do is post the login form and you get redirected to a url with a session ID in it.rosc2112 wrote:If I knew how to make a script log in to a website, then retrieving data from these boards would be fairly simple. Other people have made similar requests, but I've yet to see any example script that can log in to the website to be able to pull data from them.
Code: Select all
# usage: getegghelp <yourUsername> <yourPassword> [theDesiredDestinationUri]
# returns: url based on uri with appended session id
proc getegghelp {user pass {uri ""}} {
set Q {}
lappend Q username $user
lappend Q password $pass
lappend Q redirect $uri
lappend Q login "Log in";# required by phpbb
set t [http::geturl http://forum.egghelp.org/login.php -query [eval http::formatQuery $Q]]
if {[http::ncode $t]==302} {
upvar #0 $t s
array set h $s(meta)
http::cleanup $t
set h(Location)
} else {
error "failed?"
}
}
getegghelp rosc2112 password /search.php?search_id=newposts
Code: Select all
proc geturlauth {url args} {
# parse the url to extract user:pass
if {![regexp -- {^([a-z]+://)?(?:([^@/]+)@)?(.+)$} $url url prefix login rest]} {
error "Invalid url"
}
if {$login==""} {
error "Don't use it if you don't need it ;)"
}
array set o $args
lappend o(-headers) "Authorization" "Basic [b64e $login]"
eval http::geturl [list $prefix$rest] [array get o]
}
# base64encode based on RS's proc in the tcl wiki
proc b64e str {
binary scan $str B* bits
switch [expr {[string len $bits]%6}] {
2 {append bits 0000==}
4 {append bits 00=}
}
string map {
000000 A 000001 B 000010 C 000011 D 000100 E 000101 F
000110 G 000111 H 001000 I 001001 J 001010 K 001011 L
001100 M 001101 N 001110 O 001111 P 010000 Q 010001 R
010010 S 010011 T 010100 U 010101 V 010110 W 010111 X
011000 Y 011001 Z 011010 a 011011 b 011100 c 011101 d
011110 e 011111 f 100000 g 100001 h 100010 i 100011 j
100100 k 100101 l 100110 m 100111 n 101000 o 101001 p
101010 q 101011 r 101100 s 101101 t 101110 u 101111 v
110000 w 110001 x 110010 y 110011 z 110100 0 110101 1
110110 2 110111 3 111000 4 111001 5 111010 6 111011 7
111100 8 111101 9 111110 + 111111 /
} $bits
}