یاهو چندین پروتکل داره که فکر کنم ساده تر از همش 102 باشه که از سرعت بالایی هم برخورداره

شما به 2 تا وینسوک نیاز دارید البته با یک وینسوک هم میشه اما چون اولشه با 2تا راحت هستی
با وینسوک 1 به یاهو کانکت میشی
ٌ
Winsock1.Connect "login.yahoo.com", "80"

وقتی که کانکت شدی باید هدر و بقرستی که ایدی و پسورد هم شاملش میشه

کد زیر رو وقتی که کانکت شدی با وینسوک ارسال کد

   Dim LoginYahoo As String
LoginYahoo = "GET http://login.yahoo.com/config/login?login=" & ID & "&passwd=" & password & " HTTP/1.1" & vbCrLf
LoginYahoo = LoginYahoo & "Accept-Language: en-us" & vbCrLf
LoginYahoo = LoginYahoo & "User-Agent: Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Expulsion-Creations)" & vbCrLf
LoginYahoo = LoginYahoo & "Accept: */*" & vbCrLf
LoginYahoo = LoginYahoo & "Host: login.yahoo.com" & vbCrLf
LoginYahoo = LoginYahoo & "Connection: Keep-Alive" & vbCrLf & vbCrLf
Winsock1.SendData LoginYahoo


3 وقتی هدر رو ارسال کردی کوکی ها رو دریافت کنی

On Error Resume Next
Dim Data As String
Winsock1.GetData Data
If InStr(Data, "Yahoo! - 400 Bad Request") Then
Winsock1.Close
Debug.Print "Yahoo! - 400 Bad Request"
Exit Sub
Else:
If InStr(Data, "302 Found") Then
StrYcook = Split(Data, "Y=")(1)
StrYcook = Split(StrYcook, "np=1")(0)
StrYcook = "Y=" & StrYcook & "np=1;"
StrTcook = Split(Data, "T=")(1)
StrTcook = Split(StrTcook, ";")(0)
StrTcook = "T=" & StrTcook
Debug.Print "connect to port 80"
Winsock1.Close
Winsock2.Close
Winsock2.Connect "mcs.msg.yahoo.com", 5050
Else:
msgbox "Error!!"
Exit Sub
End If
End If

خوب اگه آیدی درست باشه کوکی دریافت میشه و با وینسوک 2 به سرور یاهو وصل میشید برای ارسال پکت ها

واسه ارسال پکت نیاز به یه هدر درست و حسابی داریم! هدرهای زیادی وجود دارن که بعضی از اونا کامل نیستن و تو دریافت پکت مشکل دارن اینی که قرار میدم تقریبا کامله من خودم حتی فایل هم از طریق یاهو باش دریافت کردم

'header
Public Function Header(YMSGPacketData As String, YMSGStatus As String, YMSGKey As String, YMSGCommand As Long) As String
Dim YMSGVendor As Long
Dim YMSGVersion As Integer
YMSGVendor = 0
YMSGVersion = 17
Header = "YMSG" & Chr(Int(YMSGVersion / 256)) & Chr(Int(YMSGVersion Mod 256)) & Chr(Int(YMSGVendor / 256)) & Chr(Int(YMSGVendor Mod 256)) & Chr(Int(Len(YMSGPacketData) / 256)) & Chr(Int(Len(YMSGPacketData) Mod 256)) & Chr(Int(YMSGCommand / 256)) & Chr(Int(YMSGCommand Mod 256)) & Mid(YMSGStatus, 1, 4) & Mid(YMSGKey, 1, 4) & YMSGPacketData
End Function


و حالا یه پکت برای ارسال کوکی و لاگین شدن
' Send Login
Public Function Login(YahooID As String, YCookie As String, TCookie As String)
On Error Resume Next
Dim InVType As String
InVType = Chr(0)
Login = Header("0" & YahooID & "2" & YahooID & "1" & YahooID & "244" & "0" & "6" & YCookie & " " & TCookie & "98us", String(3, Chr(0)) & InVType, String(3, Chr(0)) & InVType, 550)
End Function


خوب الان ما همه چیرو آماده داریم واسه لاگین شده میتونیم تا Winsock2 کانکت شد باش پکت لاگین رو ارسال کنیم
 Winsock2.SendData Login(ID, StrYcook, StrTcook)

الان اگه اطلاعات درست باشن آیدی لاگین میشه

تو قسمت Winsock2_DataArrival پکت ها دریافت میشن
هر پکت یه شماره مخصوص داره میتونید از شماره پکت ها مشخص کنید پکت دریافتی چه پکتی هست


Dim Data as string
Dim Types as integer
Winsock2.GetData Data
Types = Asc(Mid(Data, 12, 1))

اینم کد برای بدست آوردن شماره پکت

میتونید Select case Types بزارید
برای مثال
case 6 = دریافت پی ام
case 75 = دریافت تایپینگ
case 85 = لاگین شدن
case 29 = دریافت پی ام های کنفرانس
...

پایان

سوالی بود بپرسین اگه بلد بودم جواب میدم




هر روزتان نوروز / نوروزتان پیروز