Asp classic Mailgun webhooks和经典asp
我已经在Mailgun控制面板中设置了一个web钩子的URL,并设置了一个脚本,在发生跳转时将带有来自Mailgun的HTTP Post的txt文件附加到URL。我通过从提交表单的测试页面提交HTTP Post来测试它,表单数据被写入txt文件,但是当我从Mailgun触发测试时,会写入新行,但Request.form collect看起来是空的 我是否在Mailgun的HTTP帖子中遗漏了什么,以及我试图从中获取request.form集合的方式Asp classic Mailgun webhooks和经典asp,asp-classic,mailgun,Asp Classic,Mailgun,我已经在Mailgun控制面板中设置了一个web钩子的URL,并设置了一个脚本,在发生跳转时将带有来自Mailgun的HTTP Post的txt文件附加到URL。我通过从提交表单的测试页面提交HTTP Post来测试它,表单数据被写入txt文件,但是当我从Mailgun触发测试时,会写入新行,但Request.form collect看起来是空的 我是否在Mailgun的HTTP帖子中遗漏了什么,以及我试图从中获取request.form集合的方式 <% strWebhookData =
<%
strWebhookData = "///// New Entry ///" & vbnewline
For Each Item In Request.Form
fieldName = Item
fieldValue = Request.Form(Item)
Response.write fieldName & " " & fieldValue
strWebhookData = strWebhookData & fieldName &" = " & fieldValue & vbnewline
Next
Response.write strWebhookData
set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.OpenTextFile(Server.MapPath("bounces.txt"),8,true)
f.WriteLine(vbnewline & strWebhookData)
f.Close
set f=Nothing
set fs=Nothing
%>
不确定这是否有效,但请尝试
For Each x In Request.Form
fieldName = x
fieldValue = Request.Form(x)
Response.write fieldName & " " & fieldValue
strWebhookData = strWebhookData & fieldName &" = " & fieldValue & vbnewline
Next
我正在使用这个代码,我真的不记得在哪里找到它:
Response.Expires=0
Response.Buffer = TRUE
Response.Clear
byteCount = Request.TotalBytes
RequestBin = Request.BinaryRead(byteCount)
Dim UploadRequest
Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin
Sub BuildUploadRequest(RequestBin)
'Get the boundary
PosBeg = 1
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
boundaryPos = InstrB(1,RequestBin,boundary)
'Get all data inside the boundaries
Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))
'Members variable of objects are put in a dictionary object
Dim UploadControl
Set UploadControl = CreateObject("Scripting.Dictionary")
'Get an object name
Pos = InstrB(BoundaryPos,RequestBin,getByteString("Content-Disposition"))
Pos = InstrB(Pos,RequestBin,getByteString("name="))
PosBeg = Pos+6
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
PosFile = InstrB(BoundaryPos,RequestBin,getByteString("filename="))
PosBound = InstrB(PosEnd,RequestBin,boundary)
'Test if object is of file type
If PosFile<>0 AND (PosFile<PosBound) Then
'Get Filename, content-type and content of file
PosBeg = PosFile + 10
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
'Add filename to dictionary object
UploadControl.Add "FileName", FileName
Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
PosBeg = Pos+14
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
'Add content-type to dictionary object
ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
UploadControl.Add "ContentType",ContentType
'Get content of object
PosBeg = PosEnd+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
Else
'Get content of object
Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))
PosBeg = Pos+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
End If
'Add content to dictionary object
UploadControl.Add "Value" , Value
'Add dictionary object to main dictionary
UploadRequest.Add name, UploadControl
'Loop to next object
BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
Loop
End Sub
'String to byte string conversion
Function getByteString(StringStr)
For i = 1 to Len(StringStr)
char = Mid(StringStr,i,1)
getByteString = getByteString & chrB(AscB(char))
Next
End Function
'Byte string to string conversion
Function getString(StringBin)
getString =""
For intCount = 1 to LenB(StringBin)
getString = getString & chr(AscB(MidB(StringBin,intCount,1)))
Next
End Function
'一些示例变量
'您可以在mailgun日志选项卡上找到所有变量
Response.Expires=0
Response.Buffer = TRUE
Response.Clear
byteCount = Request.TotalBytes
RequestBin = Request.BinaryRead(byteCount)
Dim UploadRequest
Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin
Sub BuildUploadRequest(RequestBin)
'Get the boundary
PosBeg = 1
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
boundaryPos = InstrB(1,RequestBin,boundary)
'Get all data inside the boundaries
Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))
'Members variable of objects are put in a dictionary object
Dim UploadControl
Set UploadControl = CreateObject("Scripting.Dictionary")
'Get an object name
Pos = InstrB(BoundaryPos,RequestBin,getByteString("Content-Disposition"))
Pos = InstrB(Pos,RequestBin,getByteString("name="))
PosBeg = Pos+6
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
PosFile = InstrB(BoundaryPos,RequestBin,getByteString("filename="))
PosBound = InstrB(PosEnd,RequestBin,boundary)
'Test if object is of file type
If PosFile<>0 AND (PosFile<PosBound) Then
'Get Filename, content-type and content of file
PosBeg = PosFile + 10
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
'Add filename to dictionary object
UploadControl.Add "FileName", FileName
Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
PosBeg = Pos+14
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
'Add content-type to dictionary object
ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
UploadControl.Add "ContentType",ContentType
'Get content of object
PosBeg = PosEnd+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
Else
'Get content of object
Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))
PosBeg = Pos+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
End If
'Add content to dictionary object
UploadControl.Add "Value" , Value
'Add dictionary object to main dictionary
UploadRequest.Add name, UploadControl
'Loop to next object
BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
Loop
End Sub
'String to byte string conversion
Function getByteString(StringStr)
For i = 1 to Len(StringStr)
char = Mid(StringStr,i,1)
getByteString = getByteString & chrB(AscB(char))
Next
End Function
'Byte string to string conversion
Function getString(StringBin)
getString =""
For intCount = 1 to LenB(StringBin)
getString = getString & chr(AscB(MidB(StringBin,intCount,1)))
Next
End Function
子构建上传请求(RequestBin)
“获得边界
PosBeg=1
PosEnd=InstrB(PosBeg、RequestBin、getByteString(chr(13)))
边界=MidB(RequestBin、PosBeg、PosEnd-PosBeg)
boundaryPos=InstrB(1,RequestBin,boundary)
'获取边界内的所有数据
直到(boundaryPos=InstrB(RequestBin、boundary和getByteString(“--”)为止)
'对象的变量成员放入字典对象中
Dim上传控制
设置UploadControl=CreateObject(“Scripting.Dictionary”)
'获取对象名称
Pos=InstrB(BoundaryPos、RequestBin、getByteString(“内容处置”))
Pos=InstrB(Pos、RequestBin、getByteString(“name=”))
PosBeg=Pos+6
PosEnd=InstrB(PosBeg、RequestBin、getByteString(chr(34)))
Name=getString(MidB(RequestBin、PosBeg、PosEnd-PosBeg))
PosFile=InstrB(BoundaryPos、RequestBin、getByteString(“filename=”))
PosBound=InstrB(PosEnd、RequestBin、boundary)
'测试对象是否为文件类型
如果PosFile0和(PosFile数据是多部分/表单数据;-我使用aspUpload从表单读取变量
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.Save
strEvent = Upload.Form("event")
sBounceEmail = Upload.Form("recipient")
谢谢-但是脚本确实从我用来发布到该页面的测试页面捕获了表单变量,但没有从Mailgun HTTP post捕获任何内容。无论如何,我会尝试你的建议。Mailgun HTTP post代码是什么样子的?你能检查一下是否有任何内容实际上是通过开发工具(chrome)或Firebug传输的吗(FireFox)以下是HTTP_RAW的输出(如果有帮助的话)。内容长度:4230内容类型:多部分/表单数据;边界=2adc9741-1b71-4442-9377-170f6562daea接受编码:gzip用户代理:mailgun/treq-0.2.1