مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

masoudn

عضویت از 1397/07/14

دریافت ناقص پاسخ در درخواست نامه soap از وب سرویس سازمان بورس

  • یکشنبه 15 مهر 1397
  • 09:54
تشکر میکنم

سلام وقتتون بخیر. ممنونم از توجهتون. من دارم سعی میکنم از وب سرویس سازمان بورس با soap 1.1 envelope داده بگیرم و در قالب یک جدول در اکسل در اختیارم باشه که با درخواست های بعدی آپدیت بشه. ساختار رکوست و ریسپانس در لینک زیر توضیح داده شده

http://service.tsetmc.com/WebService/TsePublicV2.asmx?op=BestLimitsAllIns

منم این کد پایین رو توی VBA در اکسل زدم.  envelope رو آماده میکنم درخواست رو ارسال میکنم و پاسخ رو هم دریافت میکنم. اما دقیقا قسمتی از Html پاسخ که داده های اصلی در اون قرار دارند در ریسپانس دریافتی وجود نداره! با خود سازمان بورس حرف زدم کاربری و پسورد درسته سیستم هم درست کار میکنه. به نظر میرسه مشکل از VBA و کد من باشه اما هنوز متوجه نشدم چیه. خیلی خیلی لطف بزرگیه اگر راهنمایی بفرمایید. ممنون

کد من:

 
sub downloaddata()
Dim Url As String
Url = "http://service.tsetmc.com/WebService/TsePublicV2.asmx"
Dim fldr As String
fldr = "C:\Users\daily\"
'init variable values
Dim Response As String
'Build the HTTP Request object
Dim ObjHttp As New MSXML2.XmlHttp
'build soap envelope for fetching header
Dim sEnv As String
sEnv = "<?xml version=" & """" & "1.0" & """" & " encoding=" & """" & "utf-8" & """" & "?>"
sEnv = sEnv & "<soap:Envelope xmlns:xsi=" & """" & "http://www.w3.org/2001/XMLSchema-instance" & """" & " xmlns:xsd=" & """" & "http://www.w3.org/2001/XMLSchema" & """" & " xmlns:soap=" & """" & "http://schemas.xmlsoap.org/soap/envelope/" & """" & ">"
sEnv = sEnv & "<soap:Body>"
sEnv = sEnv & "<BestLimitsAllIns xmlns=" & """" & "http://tsetmc.com/" & """" & ">"
sEnv = sEnv & "<UserName>" & """" & "username" & """" & "</UserName>"
sEnv = sEnv & "<Password>" & """" & "password" & """" & "</Password>"
sEnv = sEnv & "<Flow>" & "0" & " </Flow>"
sEnv = sEnv & "</BestLimitsAllIns>"
sEnv = sEnv & "</soap:Body>"
sEnv = sEnv & "</soap:Envelope>"
'wrap the http request in a with statement
With ObjHttp
.Open "post", Url, False
.setRequestHeader "Host", "service.tsetmc.com"
.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
.setRequestHeader "Content-Length", Len(sEnv)
.setRequestHeader "SOAPAction", "http://tsetmc.com/BestLimitsAllIns"
.send sEnv
Response = ObjHttp.responseText
Debug.Print "111111111111111111111111"
Debug.Print .getAllResponseHeaders
Debug.Print .responseText
Debug.Print .Status
Debug.Print .statusText
End With
Dim XDoc As MSXML2.DOMDocument
Dim xEmpDetails As MSXML2.IXMLDOMNode
Dim xParent As MSXML2.IXMLDOMNode
Dim xChild As MSXML2.IXMLDOMNode
Dim Col, Row As Integer
Set XDoc = New MSXML2.DOMDocument
XDoc.async = False
XDoc.validateOnParse = False
If Not XDoc.LoadXML(Response) Then 'strXML is the string with XML'
Err.Raise XDoc.parseError.ErrorCode, , XDoc.parseError.reason
End If
XDoc.LoadXML (Response)
Set xEmpDetails = XDoc.DocumentElement
Set xParent = xEmpDetails.FirstChild
Row = 2
Col = 1
For Each xParent In xEmpDetails.ChildNodes
For Each xChild In xParent.ChildNodes
ThisWorkbook.Worksheets("a").Cells(Row, Col).Value = xChild.Text
Col = Col + 1
Next xChild
Row = Row + 1
Col = 1
Next xParent
End Sub

پاسخ دریافتی یک رشته باید باشه به این شکل (به جای schema  و xml داده ها قرار میگرند)

    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <BestLimitsAllInsResponse xmlns="http://tsetmc.com/
        <BestLimitsAllInsResult>
            <xsd:schema>schema(real content will be replaced) 
            </xsd:schema>xml(real content will be replaced
            </BestLimitsAllInsResult>
        </BestLimitsAllInsResponse>
    </soap:Body>
    </soap:Envelope>

اما چیزی که من میگیرم این شکلیه:

    Cache-Control: private, max-age=0
    Content-Length: 301
    Content-Type: text/xml; charset=utf-8
    Server: Microsoft-IIS/7.5
    X-Powered-By: ASP.NET
    Date: Sat, 06 Oct 2018 05:23:47 GMT
    Connection: keep-alive
    <?xml version="1.0" encoding="utf-8"?><soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body
    <BestLimitsAllInsResponse xmlns="http://tsetmc.com/" /></soap:Body>
    </soap:Envelope>
    200 
    OK
بخشی که زرد کردم تفاوت پاسخ صحیح و غلط است. دقیقا زیربچه آخر از <bestlimitsallins> تا بسته شدنش یعنی </bestlimtisallins> حذف شده از جواب. خیلی عجیبه همه پاسخ درست دریافت میشه به جز داده اصلی

پاسخ های این پرسش

تعداد پاسخ ها : 0 پاسخ
در حال حاضر هیچ پاسخی ارسال نشده است
کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)