注册 登录
编程论坛 VFP论坛

用MSXML2.XMLHTTP上传文件,出现的问题,搞了两天了,晕啊

大树临风 发布于 2024-04-05 01:44, 293 次点击
我用MSXML2.HTTPXML上传文件给Kimi,kimi要求必须:"Content-Type","multipart/form-data",拼接这个body好麻烦,很久都没有成功,请大侠指点:
lcDescription="lcDescription"
lcFilePath = GETFILE()
lcFileContent =FILETOSTR(lcFilePath)
lcApiUrl="https://api.
lcApiKey="我的APIKEY"
*// 创建XMLHTTP对象实例
loXmlHttp = CREATEOBJECT("MSXML2.XMLHTTP")
*// 设置请求方法和URL
loXmlHttp.open('POST', m.lcApiUrl, .F.)

*// 构造boundary用于multipart/form-data
lcBoundary ="--"+ALLTRIM(SYS(2))+ALLTRIM(STR(RAND(9999)))
lcContentType = "multipart/form-data; boundary=" + lcBoundary

*// 构造表单数据
lcFormData = '--' + lcBoundary + CHR(13) + CHR(10) + ;
              'Content-Disposition: form-data; name="files"; filename="选择的文件.TXT"' + CHR(13) + CHR(10) + ;
              'Content-Type: multipart/form-data' + CHR(13) + CHR(10) + CHR(13) + CHR(10) +;
              lcFileContent + CHR(13) + CHR(10) +;
              '--' + lcBoundary + CHR(13) + CHR(10) + ;
              'Content-Disposition: form-data; name="descriptions"' + CHR(13) + CHR(10) + CHR(13) + CHR(10) + ;
              lcDescription + CHR(13) + CHR(10) + ;
              '--' + lcBoundary + '--' + CHR(13) + CHR(10)

*// 设置请求头
loXmlHttp.setRequestHeader("Content-Type", lcContentType)
loXmlHttp.setRequestHeader("Authorization", "Bearer " + lcApiKey)

*// 发送POST请求
loXmlHttp.send(lcFormData)

[此贴子已经被作者于2024-4-5 01:46编辑过]

3 回复
#2
吹水佬2024-04-05 11:01
1、数据发送是否成功有效
2、试试:将包头数据每行尾只用1次回车换行符,最后尾部用2次回车换行符。
#3
nbwww2024-04-05 16:55
m.http=CREATEOBJECT("WinHttp.WinHttpRequest.5.1")
m.http.setTimeouts(5000, 5000, 5000, 5000)
m.lcUrl ="https://api.
m.http.Open("post", m.lcUrl, .f.)
m.http.setRequestHeader('Content-Type','application/json')
m.http.setRequestHeader('Authorization','Bearer sk************************')
TEXT TO post1 NOSHOW PRETEXT 7
{
    "model": "moonshot-v1-8k",
    "messages": [
        {
            "role": "system",
            "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"
        },
        { "role": "user", "content": "你好,VFP还好吗" }
    ],
    "temperature": 0.3
}
ENDTEXT
m.http.send(post1 )
m.lcRes = m.http.responseBODY
    m.lcRes = STRCONV(m.lcRes,11)
    RELEASE m.http
?m.lcRes
#4
nbwww2024-04-05 16:56
简单试了一下
FILETOSTR后  应该 setRequestHeader('Content-Type','application/json')  可以了
1