• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

در مورد برنامه نویسی و کار با سایت ایگلد راهنمایی می خوام

artin

کاربر تازه وارد
تاریخ عضویت
19 می 2004
نوشته‌ها
2,114
لایک‌ها
2
مگه اون لینکی که پرهام داد درست نبود ؟
تو فعلا باید راهی پیدا کنی که یک سری متغیر رو به صورت form حالا می خواد GET باشه می خواد POST باشه به یه لینک بفرسته و خروجی اونرو بگیری
 

Parham

Registered User
تاریخ عضویت
24 سپتامبر 2003
نوشته‌ها
1,042
لایک‌ها
2
اون کلاس WebBridge یک Property داره بنام PostData که تو مثال فوق مقدار "view=" & View رو بهش داده شما اطلاعاتی رو که میخوای ارسال کنی در اینجا بزار به این شکل: var1=value1&var2=valu2&var3=valu3 و به همین ترتیب. آدرس صفحه را با URL تعیین میکنی و بعد هم متد Connect رو صدا میزنی. و بعدش هم نتیجه رو از XMLRespons میگیری. البته نتیجه به صورت XML ممکنه نباشه. این اسمی است که تو این مثال براش در نظر گرفته و فایل پی اچ پی این مثال اون رو به صورت XML برمیگردونه ولی برای شما همانطور که آرتین جان فرمودند به صورت HTML هست. تجزیه و تحلیل محتویات HTML برگشتی هم با خودت!
 

Parham

Registered User
تاریخ عضویت
24 سپتامبر 2003
نوشته‌ها
1,042
لایک‌ها
2
این هم یک روش دیگه و ساده تر:
PHP:
        Try
            Dim remoteFile As String = "acct/confirm.asp" ' این آدرس صفحه است
            Dim qString As New NameValueCollection 'این متغیری است که پارامترها رو میگیره
            Dim webclient1 As New WebClient ' این که شیئ وب کلاینت هست که همه کارها رو این انجام میده
            Dim result As String ' این متغیری است که نتیجه توش ذخیره میشه
            webclient1.BaseAddress = "https://www.e-gold.com/" ' این آدرسی اصلی وب سایت هست. آدرس شما ترکیبی از این و آدرس صفحه بالایی خواهد بود
            webclient1.Encoding = Encoding.UTF8 ' اینجا انکودینگ عملیات رو تعیین میکنید
            qString.Add("username", "yourid") ' در این سه خط به عنوان نمونه ۳ تا پارامتر به همراه مقدارشون تعیین کردیم که فرستاده میشن
            qString.Add("password", "yourpassword")
            qString.Add("var1", "value1")

            webclient1.QueryString = qString ' اینجا این کوئری استرینگهای بالا رو به وب کلاینت نسبت میدیم

            result = webclient1.DownloadString(remoteFile) ' اینجا هم نتیجه رو داخل متغیر دانلود میکنیم
            ' خوب حالا شما نتیجه رو تو متغیر ریزولت داری و بقیه کارها رو روش انجام میدی

        Catch err As System.Net.WebException
            MessageBox.Show(err.Message) ' اگر خطایی پیش بیاد اینجا پیغام میده
        End Try

البته قبل از همه این ۳ خط رو باید اول بزاری. قبل از تعریف کلاس.
PHP:
Imports System.Net
Imports System.Collections.Specialized
Imports System.Text
 

mehrdad201

همکار بازنشسته
کاربر قدیمی پرشین تولز
تاریخ عضویت
10 سپتامبر 2005
نوشته‌ها
15,874
لایک‌ها
17,805
محل سکونت
ایران
ممنونم شما خیلی کمکم کردید
بازم سعی می کنم
نمیدونم فکز می کنم یه جای کار من مشکل داره باید اونو پیدا کنم
 

mehrdad201

همکار بازنشسته
کاربر قدیمی پرشین تولز
تاریخ عضویت
10 سپتامبر 2005
نوشته‌ها
15,874
لایک‌ها
17,805
محل سکونت
ایران
از کمک همه ممنونم
بالاخره تونستم با یه صفحه دیگه ارتباط برقرار کنم اونم فقط با دات نت

مونده تستش رو ایگلد که امیدوارم اونم زیاد اذیتمون نکنه

بازم از کمکتون ممنونم دوستان
 

mehrdad201

همکار بازنشسته
کاربر قدیمی پرشین تولز
تاریخ عضویت
10 سپتامبر 2005
نوشته‌ها
15,874
لایک‌ها
17,805
محل سکونت
ایران
آقا پرهام شما اشاره کردید که

این هم یک روش دیگه و ساده تر: توی text area آوردید مطلب رو

اما این راه رو من تست کردم مشکل داره. درقسمت downloadstring
میشه یه بار دیگه بررسی کنی. فکر می کنم راه شما راه بهتری باشه. البته اگه مشکلش حل بشه.
 

Parham

Registered User
تاریخ عضویت
24 سپتامبر 2003
نوشته‌ها
1,042
لایک‌ها
2
مجددا تست شد و مشکلی نداره. شما کدتون رو بزارید تا من تست کنم.
 

mehrdad201

همکار بازنشسته
کاربر قدیمی پرشین تولز
تاریخ عضویت
10 سپتامبر 2005
نوشته‌ها
15,874
لایک‌ها
17,805
محل سکونت
ایران
پرهام جان من تو msdn دات نت سرچ کردم و یه راهی واسه حل این مشکل پیدا کردم.
اونم اینه که این دو خط رو به جای downloadstring بذاریم

Dim myDatabuffer As Byte() = webclient1.DownloadData(remoteFile)
Dim download As String = Encoding.ASCII.GetString(myDatabuffer)

اما یه سوال دارم. شما توصیح دادی که چطوری باید از طریق quesystring متغیر ها رو به همراه مقادیرشون ارسال کرد. ( توی رشته URL )

حالا اگه بخوایم از همین روش استفاده کنیم و مقادیر رو با متد POST بفرستیم آیا راهی داره یا خیر ؟

میتونی اینو بهم بگی.
 

Parham

Registered User
تاریخ عضویت
24 سپتامبر 2003
نوشته‌ها
1,042
لایک‌ها
2
اگر میخوای از متد POST استفاده کنی از همون مثال اولی استفاده کن. که تو متد Connect کلاس WebBridge کاملا میتونی مشخص کنی که POST باشه یا GET. که تو اون مثال POST هست.
 

Parham

Registered User
تاریخ عضویت
24 سپتامبر 2003
نوشته‌ها
1,042
لایک‌ها
2
خوب به اون مثال کاری نداشته باش. من یک نمونه برات ضمیمه کردم. اون رو ببین. فقط این کدش ارور هندلینگ نداره و اگر مشکلی پیش بیاد ارور میده.
دات نت ۲۰۰۳ فرستادم چون نمیدونستم ۲۰۰۵ دارید یا نه.
 

فایل های ضمیمه

  • WebBridge.zip
    26.1 KB · نمایش ها: 1

mehrdad201

همکار بازنشسته
کاربر قدیمی پرشین تولز
تاریخ عضویت
10 سپتامبر 2005
نوشته‌ها
15,874
لایک‌ها
17,805
محل سکونت
ایران
ازت ممنونم پرهام جان
 

mehrdad201

همکار بازنشسته
کاربر قدیمی پرشین تولز
تاریخ عضویت
10 سپتامبر 2005
نوشته‌ها
15,874
لایک‌ها
17,805
محل سکونت
ایران
دوستان یه مشکلی پیش اومده
من برنامه پرهام رو تست کردم. روی لوکال کار کرد. بد.ن هیچ مشکلی

اما روی اینترنت با هر دو روش مشکل دارم. در اون روش اولی که پرهام گفته بود ( بدون کلاس و فقط با استفاده از qstring وقتی میام آدرس یه صفحه رو میدم این ارور رو میده
the remote server returned an error : 404 not found

و موقعی که میام از سایت ایگلد استفاده کنم این ارور رو میده

the underlying connection was closed could not stablished trust relationship with remote server

--------------------------------
و اما در مورد برنامه دومی که از کلاس استفاده می کرد
راستش خودم هم در عجبم آخه این برنامه روی لوکل یه بار درست کار می کنه یه بار ارور میده به همین ترتیب

وقتی که می خوام ارتباط برقرار کنم به این خط ها گیر میده ( البته گاهی اوقات به همش و گاهی هم به بعضی ها

send date
----------------------------
Dim b As Byte() = Encoding.ASCII.GetBytes(data)

get response
----------------------------------------------------------
Dim sr As Stream = rs.GetResponseStream()

پرهام جان ببین مشکل چیه

در ضمن من این متغیر رو اینطوری ست کردم

.URL = "https://e-gold.com/acct/balance.asp?AccountID=1234561&PassPhrase=pass"
 

mehrdad201

همکار بازنشسته
کاربر قدیمی پرشین تولز
تاریخ عضویت
10 سپتامبر 2005
نوشته‌ها
15,874
لایک‌ها
17,805
محل سکونت
ایران
فکر کنم مشکل رو پیدا کردم. من اون روش qstring پرهام رو رو چند تا سایت تست کردم. کار می کرد و بخوبی. البته در مورد HTTP ها نه HTTPS ها. رو چند تا سایت HTTPS که تست کردم یه ارور میده

نمی دونم یعنی چی !!!
underlying

????
 

mehrdad201

همکار بازنشسته
کاربر قدیمی پرشین تولز
تاریخ عضویت
10 سپتامبر 2005
نوشته‌ها
15,874
لایک‌ها
17,805
محل سکونت
ایران
از چند راه مختلف تو MSDN هم استفاده کردم.
جالبه رو درخواست های HTTP کار می کنن اما وقتی که HTTPS رو می خوای بخونی هیچ جوابی نمیدن.

ترو خدا یکی کمک کنه
 

mehrdad201

همکار بازنشسته
کاربر قدیمی پرشین تولز
تاریخ عضویت
10 سپتامبر 2005
نوشته‌ها
15,874
لایک‌ها
17,805
محل سکونت
ایران
کسی نیست توضیح بده چطوری باید با HTTPS ارتباط برقرار کنم. !!!!!!!!!!!!!!!!!؟؟؟
 

Parham

Registered User
تاریخ عضویت
24 سپتامبر 2003
نوشته‌ها
1,042
لایک‌ها
2
خوب مشکل پیدا شد. البته راه حلش!
این مشکل زمانی پیش میاد که برای SSL Certificate وب سایت مشکلی وجود داشته باشه و ممکنه تا حالا موقع مرور بعضی از وب سایتها روی پروتکل SSL با پیغامی روبرو شده باشید که اخطار میده برای SSL Certficate اون سایت و حتما باید کاربر تایید کنه تا وب سایت رو ببینه. برای این برنامه هم این مشکل پیش میاد ولی چون پنجره ای باز نمیشه که شما اون رو تایید کنید ارور میده. البته برای سایت e-gold مشکلی نبود. شما احتمالا با سایت دیگه ای مشکل دارید؟

به هر حال راه حل اینه:
باید یک کلاس تعریف کنیم که همیشه Certificate ها رو trust‌ کنه:
کد:
Imports System.Net
Imports System.Security.Cryptography.X509Certificates
Public Class TrustAllCertificatePolicy
    Implements System.Net.ICertificatePolicy

    Public Sub New()
    End Sub

    Public Function CheckValidationResult(ByVal sp As ServicePoint, ByVal cert As X509Certificate, ByVal req As WebRequest, ByVal problem As Integer) As Boolean Implements ICertificatePolicy.CheckValidationResult
        Return True
    End Function
End Class

بعد باید این کد رو یک جایی بزاریم که قبل از WebRequest اجرا بشه، مثلا تو Form Load:
کد:
        System.Net.ServicePointManager.CertificatePolicy = New TrustAllCertificatePolicy

بعد هم مشکل برطرف میشه.:)
کد تصحیح شده رو هم ضمیمه کردم.
 

فایل های ضمیمه

  • WebBridge.zip
    28.1 KB · نمایش ها: 2
بالا