小编gma*_*rco的帖子

使用Java在https上使用REST来使用RESTful服务

我是REST服务的新用户.我需要使用Jersey生成的RESTful API服务.问题出现是因为该服务托管在远程主机上,并且需要https访问证书.

我从组织获得了我的证书,并且我能够使用我的任何浏览器访问该REST API服务(其上设置了证书).

我在这里阅读了很多帖子,我已经按照这个主题的答案: 在Java中使用HTTPS和REST

现在我在我的Java Keystore上设置了证书.但我不知道如何在我的Java程序中使用它,所以它使用我需要进行https连接的证书.

这是我用于本地测试的简单连接代码.

package rest.test.first;
import java.net.URI;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;

public class TestClient{
public static void main(String[]args){
    ClientConfig config= new DefaultClientConfig();
    Client client=Client.create(config);
    WebResource service=client.resource(getBaseURI());
    //Fluentinterfaces
    System.out.println(service.path("rest").path("hello").accept(MediaType.TEXT_PLAIN).get(ClientResponse.class).toString());
    //Getplaintext
    System.out.println(service.path("rest").path("hello").accept(MediaType.TEXT_PLAIN).get(String.class));
    //GetXML
    System.out.println(service.path("rest").path("hello").accept(MediaType.TEXT_XML).get(String.class));
    //TheHTML
    System.out.println(service.path("rest").path("hello").accept(MediaType.TEXT_HTML).get(String.class));
}

private static URI getBaseURI(){
    return UriBuilder.fromUri("http://localhost:8080/rest.test").build();
}
}
Run Code Online (Sandbox Code Playgroud)

我读到了使用系统集属性来指定密钥库的路径,使用以下代码:

System.setProperty("javax.net.ssl.keyStore", "/path/to/keystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
Run Code Online (Sandbox Code Playgroud)

我仍然在连接到远程服务器时遇到401错误.

但后来我不知道如何在密钥库上使用我的证书进行SSL连接.我也一直在阅读有关使用sslSocketFactory的信息,但是我无法按照这篇文章的说明工作:如何在特定连接上使用不同的证书?

我已经设法使用此代码从密钥库中检索我的证书..现在我只需要知道如何在连接中使用它:

package rest.test.first;

    import java.io.FileInputStream;
    import java.security.KeyStore;
    import java.security.cert.Certificate;

    public class keystore { …
Run Code Online (Sandbox Code Playgroud)

java rest ssl https certificate

13
推荐指数
1
解决办法
6万
查看次数

只要一个完成并在队列中启动下一个作业,Python多个子进程就会有一个池/队列恢复输出

我正在启动一个子进程并在运行时解析stdout而不必等待它完成解析stdout.

for sample in all_samples:
    my_tool_subprocess = subprocess.Popen('mytool {}'.format(sample),shell=True, stdout=subprocess.PIPE)
    line = True
    while line:
        myline = my_tool_subprocess.stdout.readline()
        #here I parse stdout..
Run Code Online (Sandbox Code Playgroud)

在我的脚本中,我多次执行此操作,实际上取决于输入样本的数量.

这里的主要问题是每个子进程都是一个程序/工具,它在运行时使用1个CPU 100%.这需要一些时间......每次输入可能需要20-40分钟.

我想什么来实现的,是设置一个游泳池,队列(我不知道这是怎么确切的术语)在同时运行N最大的子进程的工作过程.所以我可以最大化性能,而不是按顺序进行.

因此,执行流程,例如最多4个作业池应该是:

  • 启动4个子流程.
  • 当其中一个作业完成后,解析stdout并启动下一个.
  • 执行此操作直到队列中的所有作业完成.

如果我能实现这一点,我真的不知道如何识别哪个样本子流程已完成.此时,我不需要识别它们,因为每个子进程按顺序运行,并且我解析stdout,因为子进程正在打印stdout.

这非常重要,因为我需要识别每个子流程的输出并将其分配给它的相应输入/样本.

python queue parallel-processing subprocess stdout

13
推荐指数
1
解决办法
1万
查看次数

Perl\R regex剥离Windows换行符

我正在使用Perl脚本使用以下代码删除输入文件中可能的Windows换行符:

foreach my $line(split /\r|\R/)

在两台不同的Linux机器上执行相同的脚本会产生不同的结果.在machine1脚本按预期工作,在每次发现大写"R"字符时在machine2上,行被拆分并且结果被弄乱.

我想知道\R正则表达式是否正确以及如何使machine2按预期运行.

regex linux windows perl newline

5
推荐指数
1
解决办法
2652
查看次数

Python在大清单上随机抽样非常慢

我期望下面的算法性能非常慢.我有一个包含大字符串的非常大的(1.000.000+)列表.

即: id_list = ['MYSUPERLARGEID:1123:123123', 'MYSUPERLARGEID:1123:134534389', 'MYSUPERLARGEID:1123:12763']...

num_reads是从此列表中随机选择的最大元素数.我的想法是随机选择其中一个字符串ID,id_list直到num_reads达到并添加(我说添加,而不是附加,因为我不关心random_id_list订单)它们random_id_list在开头是空的.

我不能重复相同的id,所以我在被randonly选中后将其从原始列表中删除.我怀疑这是脚本真正变慢的原因.也许我错了,这是这个循环的另一部分,负责缓慢的行为.

for x in xrange(0, num_reads):
    id_index, id_string = random.choice(list(enumerate(id_list)))
    random_id_list.append(id_string)
    del read_id_list[id_index]
Run Code Online (Sandbox Code Playgroud)

python random performance choice range

1
推荐指数
1
解决办法
1821
查看次数