我一直在编写python代码很长一段时间才能获得CSGO gamestate_integration,但我目前需要在vb.net中编写一些内容来做同样的事情并且它无法正常工作。
tl; dr版本:vb.net不接受来自CSGO的帖子请求,但是一个简单的python脚本可以回应对vb.net的帖子请求并且它可以工作。 vb.net应用程序以管理员身份运行。
我有一个简单的类文件(显然我的URI是私有的):
Imports System.IO
Imports System.ServiceModel
Imports System.ServiceModel.Web
Imports JSONReceiver
<ServiceContract()>
Public Interface iJSONReceiver
<OperationContract>
<WebGet()>
Function get_stats(ByVal data As String) As String
<OperationContract()>
<WebInvoke(RequestFormat:=WebMessageFormat.Json)>
Function post_stats(ByVal request As Stream) As String
End Interface
Public Class JSONReceiver
Implements iJSONReceiver
Public Function post_stats(ByVal request As Stream) As String Implements iJSONReceiver.post_stats
Dim reader As New StreamReader(request)
Console.WriteLine("In post_stats")
Console.WriteLine(reader.ReadToEnd())
Console.WriteLine()
Return "OK"
End Function
Public Function get_stats(ByVal data As String) As String Implements iJSONReceiver.get_stats
Console.WriteLine("In get_stats")
Console.WriteLine(data)
Console.WriteLine()
Return "OK"
End Function
End Class
用于测试它的简单代码:
Public host As WebServiceHost
Public post_ep As ServiceEndpoint
Public Sub main()
host = New WebServiceHost(GetType(JSONReceiver), New Uri("http://192.168.1.102:8080"))
post_ep = host.AddServiceEndpoint(GetType(iJSONReceiver), New WebHttpBinding(), "")
host.Open()
Console.WriteLine("Press enter to quit...")
Console.ReadLine()
host.Close()
End Sub
我可以使用Web浏览器指向get_stats()端点,它工作得很好,但我正在尝试使用CSGO gamestate_integration功能将数据发布到我的服务中,它似乎不会喜欢它。
所以我所做的就是撕掉我的旧python代码,简单地回应对vb.net web服务的请求,它可以工作...... python代码接收数据并简单地将其发布到vb.net服务,并且vb.net服务很乐意接受它。
所以我将vb JSONReceiver的URI更改为端口8081,并在原始uri上运行此脚本(192.168.1.102:8080)
import web
import urllib2
class Stats(object):
def POST(self):
json_data = web.data()
try:
echo(json_data)
except Exception, e:
print(e.__str__())
return "OK"
def echo(data):
request = urllib2.Request("http://192.168.1.102:8081/post_stats")
request.add_data(data)
f = urllib2.urlopen(request)
print f.read()
urls = (
'/post_stats', 'Stats',
)
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
简而言之,URI CSGO用于发布到我的服务是http://192.168.1.102:8080,它会点击我的python服务,然后将请求逐字回显到http://192.168.1.102:8081(同样,这些是私有URI)。
我不知道为什么,但它确实有效......但是必须运行包装才能获得这些数据不仅奇怪,而且这对问题来说真的不是一个可接受的解决方案......显然当它来自我的python脚本时,vb.net正好处理帖子请求;显然CSGO正在发布请求,或者我的python脚本无法接收它,所以我在查找断开连接时遇到问题...
Python是否会在CSGO可能不会的请求中添加内容?
我是否需要回退到套接字编程?