Причина, по которой это происходит, можно найти здесь:
mlist = [1,2,3,4,5]
mlist2 = mlist
второй оператор «указывает» mlist2
на mlist
(т. е. оба они относятся к одному ), и любые изменения, внесенные вами в один, отражаются в другом.
Чтобы сделать копию вместо этого попробуйте это (используя операцию среза):
mlist = [1,2,3,4,5]
mlist2 = mlist[:]
Если вам любопытно о нотации среза, этот SO-вопрос Списки Python (Slice метод даст вам больше фона.
Наконец , не рекомендуется использовать list
в качестве идентификатора, поскольку Python уже использует этот идентификатор для своего собственная структура данных (по этой причине я добавил «m
» перед именами переменных)
После сравнения необработанных HTTP-данных, сгенерированных curl, с данными, сгенерированными вашим кодом, я обнаружил следующие различия:
Expect: 100-continue
Следующий код должен быть эквивалентен этой команде curl, однако я не могу проверить ее с GeoServer. Я использовал свободный API apache-httpclient (то есть fluent-hc-4.5.7.jar
). Дайте мне знать, если это работает.
import java.io.File;
import org.apache.http.client.fluent.*;
import org.apache.http.entity.ContentType;
public class QuickStart {
public static void main(String[] args) throws Exception {
File file = new File("data.zip");
Executor executor = Executor.newInstance()
.auth("admin", "geoserver")
.authPreemptive("172.16.17.86:9090");
String response = executor.execute(Request.Put("http://172.16.17.86:9090/geoserver/rest/workspaces/IDIRA6/datastores/Murrindindi/file.shp")
.useExpectContinue()
.bodyFile(file, ContentType.create("application/zip")))
.returnResponse()
.toString();
System.out.println(response);
}
}