Shamrock: fix 非常に奇妙なフォームデータの問題

This commit is contained in:
ikechan8370 2023-11-24 15:18:50 +08:00
parent edf857bcb6
commit 282233131a

View File

@ -16,16 +16,17 @@ import com.tencent.qqnt.kernel.nativeinterface.MemberInfo
import com.tencent.qqnt.kernel.nativeinterface.MsgConstant import com.tencent.qqnt.kernel.nativeinterface.MsgConstant
import friendlist.stUinInfo import friendlist.stUinInfo
import io.ktor.client.call.body import io.ktor.client.call.body
import io.ktor.client.plugins.onUpload import io.ktor.client.request.forms.MultiPartFormDataContent
import io.ktor.client.request.forms.formData import io.ktor.client.request.forms.formData
import io.ktor.client.request.forms.submitForm import io.ktor.client.request.forms.submitForm
import io.ktor.client.request.forms.submitFormWithBinaryData
import io.ktor.client.request.get import io.ktor.client.request.get
import io.ktor.client.request.header import io.ktor.client.request.header
import io.ktor.client.request.post import io.ktor.client.request.post
import io.ktor.client.request.setBody import io.ktor.client.request.setBody
import io.ktor.http.ContentType
import io.ktor.http.Headers import io.ktor.http.Headers
import io.ktor.http.HttpHeaders import io.ktor.http.HttpHeaders
import io.ktor.http.contentType
import io.ktor.http.headers import io.ktor.http.headers
import io.ktor.http.parameters import io.ktor.http.parameters
import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.DelicateCoroutinesApi
@ -46,7 +47,6 @@ import moe.fuqiuluo.proto.asInt
import moe.fuqiuluo.proto.asUtf8String import moe.fuqiuluo.proto.asUtf8String
import moe.fuqiuluo.proto.protobufOf import moe.fuqiuluo.proto.protobufOf
import moe.fuqiuluo.qqinterface.servlet.entries.ProhibitedMemberInfo import moe.fuqiuluo.qqinterface.servlet.entries.ProhibitedMemberInfo
import moe.fuqiuluo.shamrock.helper.Level
import moe.fuqiuluo.shamrock.helper.LogCenter import moe.fuqiuluo.shamrock.helper.LogCenter
import moe.fuqiuluo.shamrock.helper.MessageHelper import moe.fuqiuluo.shamrock.helper.MessageHelper
import moe.fuqiuluo.shamrock.remote.service.data.EssenceMessage import moe.fuqiuluo.shamrock.remote.service.data.EssenceMessage
@ -831,28 +831,37 @@ internal object GroupSvc: BaseSvc() {
@OptIn(ExperimentalSerializationApi::class) @OptIn(ExperimentalSerializationApi::class)
suspend fun uploadImageTroopNotice(image: String): Result<GroupAnnouncementMessageImage> { suspend fun uploadImageTroopNotice(image: String): Result<GroupAnnouncementMessageImage> {
// 图片上传有问题
val file = FileUtils.parseAndSave(image) val file = FileUtils.parseAndSave(image)
val cookie = TicketSvc.getCookie("qun.qq.com") val cookie = TicketSvc.getCookie("qun.qq.com")
val bkn = TicketSvc.getBkn(TicketSvc.getRealSkey(TicketSvc.getUin())) val bkn = TicketSvc.getBkn(TicketSvc.getRealSkey(TicketSvc.getUin()))
val response = GlobalClient.submitFormWithBinaryData( val response = GlobalClient.post("https://web.qun.qq.com/cgi-bin/announce/upload_img") {
url = "https://web.qun.qq.com/cgi-bin/announce/upload_img",
formData = formData {
append("filename", "001.png")
append("source", "troopNotice")
append("bkn", bkn)
append("m", "0")
append("pic_up", file.readBytes(), Headers.build {
append(HttpHeaders.ContentType, "image/png")
append(HttpHeaders.ContentDisposition, "filename=\"001.png\"")
})
},
block = {
headers { headers {
header("Cookie", cookie) header("Cookie", cookie)
} }
contentType(ContentType.MultiPart.FormData)
setBody(MultiPartFormDataContent(
// 黑人问号 ktor默认formdata传的tx不认。默认是name=bkn非要写成name="bkn"才认?
formData {
append("filename", "001.png", Headers.build {
append(HttpHeaders.ContentDisposition, "name=\"filename\"")
})
append("source", "troopNotice", Headers.build {
append(HttpHeaders.ContentDisposition, "name=\"source\"")
})
append("bkn", bkn, Headers.build {
append(HttpHeaders.ContentDisposition, "name=\"bkn\"")
})
append("m", "0", Headers.build {
append(HttpHeaders.ContentDisposition, "name=\"m\"")
})
append("pic_up", file.readBytes(), Headers.build {
append(HttpHeaders.ContentType, "image/png")
append(HttpHeaders.ContentDisposition, "name=\"pic_up\" filename=\"001.png\"")
})
}
))
} }
)
val body = Json.decodeFromStream<JsonElement>(response.body()) val body = Json.decodeFromStream<JsonElement>(response.body())
if (body.jsonObject["ec"].asInt == 0) { if (body.jsonObject["ec"].asInt == 0) {
var idJsonStr = body.jsonObject["id"].asStringOrNull var idJsonStr = body.jsonObject["id"].asStringOrNull