我想使用URLFetch服务在Google App Engine应用中打开HTTPS连接.为了能够验证我的应用正在与之交谈的服务器的SSL证书,我使用自己的密钥库文件.我想在加载我的应用程序时,即在执行任何HTTPS请求之前,在预热请求中读取此文件.密钥库文件是我的WAR文件的一部分.
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(ClassLoader.getSystemResourceAsStream("myKeystoreFile"), "password".toCharArray());
trustManagerFactory.init(keystore);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustManagers, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
Run Code Online (Sandbox Code Playgroud)
但是,我不能使用这种方法,因为虽然HttpURLConnection在GAE的JRE白名单上,但HttpsUrlConnection却没有.
还有另一种在GAE中使用自定义密钥库的方法吗?我在GAE文档中没有找到任何相关信息.看起来,当Google的URLFetch服务支持HTTPS时,无法自定义密钥库.它是否正确?
如果这是不可能的,那么这种方法一般是否仍然有效?或者是否有一种不同的方法仍然允许我验证SSL证书?
UPDATE
2009年,谷歌的App Engine开发者Nick Johnson在https://groups.google.com/d/topic/google-appengine-python/C9RSDGeIraE/discussion上说:
urlfetch API不允许您指定自己的客户端证书,因此很遗憾您目前无法实现所需的目标.
这仍然是正确的吗?如果App Engine中的每个HTTP(s)请求都依赖于URLFetch,这意味着GAE中根本无法使用自定义证书.
我最近切换到Google App Engine Java SDK 1.7.3.从那时起,每次我将DeferredTasks提交到任务队列时,我的PermGen空间都用完了.
它发生在使用Java 6的MacOSX 10.7.5上
$ java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
Run Code Online (Sandbox Code Playgroud)这是我发现问题时堆栈跟踪的一部分.
INFO: Successfully processed ../target/projectName/WEB-INF/queue.xml
Nov 1, 2012 3:04:00 PM com.google.appengine.api.taskqueue.dev.LocalTaskQueue init
INFO: LocalTaskQueue is initialized
Nov 1, 2012 3:04:01 PM org.quartz.simpl.SimpleThreadPool initialize
INFO: Job execution threads will use class loader of thread: 1255545583@qtp-1458850232-0
Nov 1, 2012 3:04:02 PM org.quartz.core.QuartzScheduler <init>
INFO: …
Run Code Online (Sandbox Code Playgroud)看起来像Google App Engine插件已经破坏了新的maven 3.1.0版本.当我尝试运行开发服务器时,我得到了异常
Caused by: java.lang.ClassNotFoundException: org.sonatype.aether.RepositorySystem
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:244)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230)
... 57 more
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我的maven版本是
Apache Maven 3.1.0 (893ca28a1da9d5f51ac03827af98bb730128f9f2; 2013-06-28 05:15:32+0300)
Maven home: C:\Program Files\Maven\apache-maven-3.1.0
Java version: 1.7.0_25, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_25\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
Run Code Online (Sandbox Code Playgroud)
在Apache网站上有关于此问题的汇总页面http://cwiki.apache.org/confluence/display/MAVEN/AetherClassNotFound
我使用Google App Engine上的Go构建了一个小型示例应用程序,在调用不同的URL时发送字符串响应.但是,如何使用Go的http包向客户端发送204 No Content响应?
package hello
import (
"fmt"
"net/http"
"appengine"
"appengine/memcache"
)
func init() {
http.HandleFunc("/", hello)
http.HandleFunc("/hits", showHits)
}
func hello(w http.ResponseWriter, r *http.Request) {
name := r.Header.Get("name")
fmt.Fprintf(w, "Hello %s!", name)
}
func showHits(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "%d", hits(r))
}
func hits(r *http.Request) uint64 {
c := appengine.NewContext(r)
newValue, _ := memcache.Increment(c, "hits", 1, 0)
return newValue
}
Run Code Online (Sandbox Code Playgroud) 我使用的是从BigQuery列中提取JSON数据JSON_EXTRACT
.现在我想提取值列表AVG
并对它们运行聚合函数(如)..objects[*].v
在http://jsonpath.curiousconcept.com/上测试JsonPath表达式成功.但查询:
SELECT
JSON_EXTRACT(json_column, "$.id") as id,
AVG(JSON_EXTRACT(json_column, "$.objects[*].v")) as average_value
FROM [tablename]
Run Code Online (Sandbox Code Playgroud)
在BigQuery上抛出JsonPath解析错误.这可能在BigQuery上吗?或者我是否需要预处理我的数据以便针对我的JSON内部的数据运行聚合函数?
我的数据与此类似:
# Record 1
{
"id": "abc",
"objects": [
{
"id": 1,
"v": 1
},
{
"id": 2,
"v": 3
}
]
}
# Record 2
{
"id": "def",
"objects": [
{
"id": 1,
"v": 2
},
{
"id": 2,
"v": 5
}
]
}
Run Code Online (Sandbox Code Playgroud)
这与另一个问题有关.
更新:运行两个查询可以简化问题.首先,运行JSON_EXTRACT
并将结果保存到视图中.其次,针对此视图运行聚合函数.但即便如此,我还需要纠正JsonPath表达式$.objects[*].v …
sql json aggregate-functions google-cloud-sql google-bigquery
我正在使用最新的 Go GAE SDK开发服务器.每次更改后我都会运行测试:
goapp test -test.v=true
Run Code Online (Sandbox Code Playgroud)
我-cover
用来记录覆盖范围,如下所述goapp help testflag
:
goapp test -cover -test.v=true -test.coverprofile=c.out
[..]
coverage: 53.8% of statements
ok _/var/lib/jenkins/jobs/loyalty/workspace 30.464s
Run Code Online (Sandbox Code Playgroud)
这成功完成并打印测试所涵盖的行的百分比.但是,尝试可视化结果失败:
goapp tool cover -html=c.out
cover: can't find "app.go": cannot find package "_/home/ingo/git/loyalty/" in any of:
/home/ingo/Downloads/go_appengine_sdk_linux_amd64-1.9.10/go_appengine/goroot/src/pkg/_/home/ingo/git/loyalty (from $GOROOT)
/home/ingo/git/loyalty/src/_/home/ingo/git/loyalty (from $GOPATH)
Run Code Online (Sandbox Code Playgroud)
Go的封面工具是否仅适用于非GAE应用程序?我是否必须以不同方式打包我的应用程序才能显示覆盖率结果?
我以前在golang-nuts上问过这个问题是不成功的.
在AWS SDK,EC2实例可以通过编程的推出AmazonEC2Client.一般的GCP或计算引擎是否专门为相同的操作提供基于CLI的 gcloud
命令?或者也可以从Java/Python/Go/etc控制GCE实例?哪些SDK适用于这些语言,其示例和文档在哪里?
我在GCP世界中寻找相同的东西:
client = new AmazonEC2Client(credentials);
client.runInstances(new RunInstancesRequest())
Run Code Online (Sandbox Code Playgroud)