我正在使用Scala和Akka構建電信公司的應用程序,並且需要使用UCIP protocol與帳戶信息和重填服務器進行通信。如何使用噴霧客戶端設置非標準用戶代理?
UCIP是一個簡單的協議,建立在XMLRPC上;我遇到的唯一問題是它需要客戶端以User-Agent: <client name>/<protocol version>/<client version>
的特定格式設置User-Agent
標題,該標題將噴出的分析視爲無效。
我試圖創建一個自定義User-Agent
標題,從spray.http.HttpHeader
繼承,但它仍然無法正常工作。下面是我到目前爲止有:
import akka.actor.ActorSystem
import akka.event.{Logging, LoggingAdapter}
import spray.client.pipelining._
import spray.http._
import spray.httpx._
case class `User-Agent`(value: String) extends HttpHeader {
def lowercaseName: String = "user-agent"
def name: String = "User-Agent"
def render[R <: Rendering](r: R): r.type = r ~~ s"User-Agent: $value"
}
class UcipClient(val url: String, val protocol: String, username: String, password: String) (implicit system: ActorSystem) {
val log = Logging.getLogger(system, this)
val logRequest: HttpRequest => HttpRequest = { r => log.debug(r.toString); r }
val logResponse: HttpResponse => HttpResponse = { r => log.debug(r.toString); r }
val pipeline = (
addHeader(`User-Agent`("USSD-UCIP/%s/1.0".format(protocol)))
~> addCredentials(BasicHttpCredentials(username, password))
~> logRequest
~> sendReceive
~> logResponse
)
def send(req: UcipRequest) = pipeline(Post(url, req.getRequest))
}
我的請求回頭率「對不起,發生錯誤:403,無效的協議版本沒有定義」,但是,他們回到正確的反應,當我發送郵件使用curl
相同的細節。
我錯過了什麼,甚至可以用噴客戶端?我花了一些時間檢查互聯網(這導致我走向自定義標題路線),但仍然沒有想出這個......真的很感謝任何幫助:-)