Boot.scalaで、
LiftRules.encodeJSessionIdInUrl_? = trueしてやればOK。
Liftで携帯サイト作ってる人とかはアップデートの際に要注意!
ScalaとかObjective-Cとかforce.comとかで開発してます。
LiftRules.encodeJSessionIdInUrl_? = trueしてやればOK。
Note that when using an InputStream generator, chuncked encoding will be used with no Content-Length header
import dispatch._ import dispatch.Http._ import dispatch.mime.Mime._ import org.apache.http.entity.mime.content.ByteArrayBody var req = ... //普通にdispatchのRequest作る req = req next req.add(paramName, new ByteArrayBody(data, contentType, filename)) //ByteArrayBodyを指定
val httpmime = "org.apache.httpcomponents" % "httpmime" % "4.1-beta1"
| ログイン画面 | 承認画面 |
|---|---|
| 特に問題なし! | 自動でリダイレクトはされないが、リンクを手動でクリックすれば動作はOK! |
| ログイン画面 | 承認画面 |
|---|---|
| 文字化けがひどいが、ID・パスワード欄っぽいところに入れて1つ目のボタン(ログイン)を押せば承認画面に飛ぶ。 | 自動でリダイレクトはされないが、リンクを手動でクリックすれば動作はOK! |
| ログイン画面 | 承認画面 |
|---|---|
| 両方とも送信ボタン…。1つ目を押せば承認画面に飛ぶ。 | 文字化けがひどいが、リンクを手動でクリックすれば動作はOK! |
| ログイン画面 | 承認画面 |
|---|---|
| 日本語文字化け… | 文字化け&Denyが押せないが、動作はOK! |
| ログイン画面 | 承認画面 |
|---|---|
| デザインは崩れるが、動作はOK! | デザインは崩れるが、動作はOK! |
import dispatch._
import com.google.appengine.api.urlfetch._
import java.net.URL
object DispatchHelper {
/**
* convert dispatch.Request -> String
*/
implicit def r2s(r: Request) = {
r.host.get + r.req.getRequestLine.getUri
}
/**
* convert dispatch.Request -> com.google.appengine.api.urlfetch.HTTPRequest
*/
implicit def dispatch2gae(r: Request): HTTPRequest = {
val isPost = r.req.getMethod == "POST"
val g = new HTTPRequest(new URL(r), if (isPost) HTTPMethod.POST else HTTPMethod.GET, FetchOptions.Builder.withDeadline(10))
r.req.getAllHeaders.foreach(h => {g.addHeader(h); println(h)})
r.req match {
case p: org.apache.http.client.methods.HttpPost =>
val payload = new java.io.ByteArrayOutputStream
p.getEntity.writeTo(payload)
g.setPayload(payload.toByteArray)
println(p.getEntity.getContentType)
case _ =>
}
g
}
}
def changeTagName[T >: Node](from: String, to: String)(in: T): T = in match {
case Elem(p, l, a, ns, child @ _*) =>
val label = if (l == from) to else l
Elem(p, label, a, ns, child.map(changeTagName(from, to)(_)): _*)
case x => x
}
scala> val hoge2moge = changeTagName("hoge", "moge") _
scala> hoge2moge: (scala.xml.Node) => scala.xml.Node = <function>
scala> hoge2moge(<pre:hoge attr="value">parentText<child:hoge>childtext</child:hoge></pre:hoge>)
scala> res17: scala.xml.Node = <pre:moge attr="value">parentText<child:moge>childtext</child:moge></pre:moge>
def changeTagName[T >: Node](changeFunc: (String) => String)(in: T): T = in match {
case Elem(p, l, a, ns, child @ _*) =>
Elem(p, changeFunc(l), a, ns, child.map(changeTagName(changeFunc)(_)): _*)
case x => x
}
scala> val c = changeTagName(s => if (List("moge", "koge").contains(s)) "bege" else s) _
c: (scala.xml.Node) => scala.xml.Node = <function>
scala> c(x)
res6: scala.xml.Node =
<lage>
<hoge>
<bege></bege>
<bege></bege>
</hoge>
<hoge>
<bege></bege>
<bege></bege>
</hoge>
</lage>
def changeTagName(changeFunc: (String) => String)(in: NodeSeq): NodeSeq = in match {
case Elem(p, l, a, ns, child @ _*) =>
Elem(p, changeFunc(l), a, ns, child.flatMap(changeTagName(changeFunc)(_)): _*)
case x => x
}